2066 字
10 分钟
基础备份调优

########################################调优及备份########################################

1.配置环境变量 export LD_LIBRARY_PATH=“LDLIBRARYPATH:/dm8/bin"exportDMHOME="/dm8"原有基础加上下面这条(原有是安装达梦自带的)exportPATH=LD_LIBRARY_PATH:/dm8/bin" export DM_HOME="/dm8" 原有基础加上下面这条(原有是安装达梦自带的) export PATH=PATH:DMHOME/bin:DM_HOME/bin:DM_HOME/tool

2.dm.ini参数调优 参考:https://eco.dameng.com/document/dm/zh-cn/pm/physical-storage 使用sysdba用户登陆dm管理工具或disql工具,执行以下脚本 如果在disql命令行中执行,需要先执行 set serverout on 然后再执行脚本,将执行后显示的 sp_set_para_value 部分的sql粘贴出来,重新再执行

###特别注意,小心修改这两个参数 RECYCLE,BUFFER

disql SYSDBA/SYSDBA@192.168.81.81:5236

set serverout on sp_set_para_value(2,‘WORKER_THREADS’, 16 ); —工作线程数 sp_set_para_value(2,‘TASK_THREADS’, 4 ); —任务线程数 sp_set_para_value(2,‘IO_THR_GROUPS’, 4 ); —io线程组数(限非Windows) sp_set_para_value(2,‘MAX_OS_MEMORY’, 100 ); —操作系统内存的最大百分比 sp_set_para_value(2,‘MEMORY_POOL’, 8000 ); —内存池大小(mb) sp_set_para_value(2,‘MEMORY_N_POOLS’, 59 ); —内存池数量 sp_set_para_value(2,‘MEMORY_TARGET’, 30000 ); —内存共享池目标大小(MB) sp_set_para_value(2,‘BUFFER’, 320000 ); —初始系统缓冲区大小(MB) sp_set_para_value(2,‘BUFFER_POOLS’, 301 ); —缓冲池数量 sp_set_para_value(2,‘RECYCLE’, 32000 ); —系统回收缓冲区大小(MB) sp_set_para_value(2,‘RECYCLE_POOLS’, 51 ); —回收缓冲池的数量 sp_set_para_value(2,‘FAST_POOL_PAGES’, 99999999 ); —快速池的页数 sp_set_para_value(2,‘FAST_ROLL_PAGES’, 9999999 ); —快速滚动页面的页数 sp_set_para_value(2,‘MEMORY_MAGIC_CHECK’, 1 ); —是否开启对所有内存池的校验,0关,1开,2加强开 sp_set_para_value(2,‘ENABLE_FREQROOTS’, 1 ); —是否收集频繁使用的页面 sp_set_para_value(2,‘HJ_BUF_GLOBAL_SIZE’, 128000 ); —所有hash连接的最大hash缓冲区大小(MB) sp_set_para_value(2,‘HJ_BUF_SIZE’, 512 ); —单个hash连接的最大hash缓冲区大小(MB) sp_set_para_value(2,‘SORT_FLAG’, 1 ); —选择排序方法 sp_set_para_value(2,‘SORT_BLK_SIZE’, 1 ); —最大排序blk大小(MB)

将 DIRECT_IO 改为0 注意改 sp_set_para_value(2,‘DIRECT_IO’, 0 ); 即为参数调优 刷参数后必须调整参数; alter system set ‘MAX_SESSIONS’=2000 SPFILE; [最大连接数]

注意其他参数:(详细见管理员手册) COMPATIBLE_MODE (异构数据库兼容):2 3 4(是否启用联机分析) MPP 集群改成1,其他环境为2 PWD_POLICY(密码策略):在dm.ini最后另起一行,添加该参数=0

修改方法: sp_set_para_value(2,‘COMPATIBLE_MODE’, 2 );

3.注册许可证 —测试略 上传正确的KEY到/dm8/bin(如果使用错误的处理器类型key将导致实例停止) 1>.数据库正在使用 #替换/dm8/bin文件 chown dmdba /dm/bin/dm.key chmod 755 /dm/bin/dm.key #数据库更新授权,检查 sp_load_lic_info(); SELECT EXPIRED_DATE,SERVER_TYPE from V$LICENSE; 字段描述: EXPIRED_DATE:授权日期,null代表永久 SERVER_TYPE:3表示试用版,1表示正式版 CLUSTER_TYPE:是否企业版

2>.数据库已关闭 #替换/dm8/bin文件,修改权限即可 chown dmdba /dm/bin/dm.key chmod 755 /dm/bin/dm.key

4.创建表空间及备份 说明:创建rural用户,密码为,数据存在rural表空间中,权限给 PUBLIC/RESOURCE/VTI/SOI/SVI 创建表空间时:若/dm8_data分区容量小于500G,则表空间总大小不超/dm8_data分区容量的70%; 若/dm8_data分区容量大于500G,则表空间文件上线可设置为500G;

disql SYSDBA/SYSDBA@192.168.81.81:5236

—表空间和数据库用户应用自己建 —创建表空间 create tablespace “rural” datafile ‘/dm8_data/rural/rural.DBF’ size 10240 AUTOEXTEND ON NEXT 2048; —创建索引表空间(数据量小项目可以不必,数据量大的项目需要分开维护) create tablespace “rural_idx” datafile ‘/dm8_data/rural/rural_idx.DBF’ size 5120 AUTOEXTEND ON NEXT 2048; —创建用户 CREATE USER “rural” IDENTIFIED BY “admin1234” DEFAULT TABLESPACE “rural” DEFAULT INDEX TABLESPACE “rural_idx”; —赋予权限 GRANT “PUBLIC”,“RESOURCE”,“VTI”,“SOI”,“SVI” TO “rural”; —取消用户登陆限制 alter user “rural” limit failed_login_attemps unlimited,password_lock_time unlimited,password_grace_time unlimited;

—删除用户 drop user “rural” cascade; —删除表空间 drop tablespace “rural”; drop tablespace “rural_idx”;

—创建只读用户,DBQUERY CREATE USER “DBQUERY” IDENTIFIED BY “DBQUERY168” read only; —赋予权限 grant CREATE SESSION,SELECT ANY TABLE,SELECT ANY VIEW TO “DBQUERY”; —更改sysdba密码 alter user “SYSDBA” identified by “oracle”;

5.归档配置 1>查询归档 select PARA_NAME,PARA_VALUE,DEFAULT_VALUE from v$dm_ini where para_name LIKE ‘%ARCH_INI%’;

2>查询归档状态 Select * from v$arch_status;

3>检查归档参数是否生效 cd /dm8_data/rural/ cat dm.ini|grep -i ARCH_INI

4>归档自动删除 注意:归档之前已经配置,不需要再次执行 ###按照归档大小删除 ARCH_SPACE_LIMIT:Redo日志归档空间限制,当同一节点的本地归档文件或远程归档文件达到限制值时, 系统自动删除最早生成的归档日志文件。0表示无空间限制,取值范围(1024M~2147483647M), 对本地归档和远程归档有效,缺省为0。可手动修改dmarch.ini中ARCH_SPACE_LIMIT参数,也可执行sql: alter database modify archivelog ‘DEST=/dm8/arch, TYPE=LOCAL, FILE_SIZE=200, SPACE_LIMIT=10240’;

###按照时间删除 ARCH_RESERVE_TIME:归档日志保留时间,单位分钟,取值范围(0~4294967294)。 只对远程归档和本地归档有效,服务器每隔5分钟检查是否存在超过保留时间的归档并删除。 默认为0,表示不删除归档。手动修改dmarch.ini中ARCH_RESERVE_TIME参数,更改为1440即归档保留24小时。

6.定时备份及删除 #全量+删除 —说明:每天23:30生成统计信息,全量备份,删除30天前的全量备份 —注意开启归档,备份路径/backup/dailybak call SP_INIT_JOB_SYS(1); call SP_CREATE_JOB(‘coun_bakall_delall’,1,0,”,0,0,”,0,‘每天 23:00 全量备份、删除 30 天前的全量备份’); call SP_JOB_CONFIG_START(‘coun_bakall_delall’); call SP_ADD_JOB_STEP(‘coun_bakall_delall’, ‘coun’, 0, ‘CALL SP_DB_STAT_INIT();’, 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_STEP(‘coun_bakall_delall’, ‘bakall’, 6, ‘01020000/backup/dailybak’, 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_STEP(‘coun_bakall_delall’, ‘delall’, 0, ‘SF_BAKSET_BACKUP_DIR_ADD(”DISK”,”/backup/dailybak”); CALL SP_DB_BAKSET_REMOVE_BATCH(”DISK”,SYSDATE-30);’, 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE(‘coun_bakall_delall’, ‘coun_bakall_delall_time01’, 1, 1, 1, 0, 0, ‘23:30:00’, NULL, ‘2019-01-01 01:01:01’, NULL, ”); call SP_JOB_CONFIG_COMMIT(‘coun_bakall_delall’);

#全量+增量+删除(建议采用) SP_INIT_JOB_SYS(1); call SP_CREATE_JOB(‘bakall_one’,1,0,”,0,0,”,0,‘执行一次全量备份’); call SP_JOB_CONFIG_START(‘bakall_one’); call SP_ADD_JOB_STEP(‘bakall_one’, ‘bakall_one_work’, 6, ‘01020000/backup/dailybak’, 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE(‘bakall_one’, ‘bakall_one_time’, 1, 0, 0, 0, 0, NULL, NULL, ‘2023-07-04 14:50:00’, NULL, ”); call SP_JOB_CONFIG_COMMIT(‘bakall_one’);

—创建代理环境 call SP_INIT_JOB_SYS(1); call SP_DROP_JOB(‘full_bak’); call SP_DROP_JOB(‘inc_bak’); call SP_DROP_JOB(‘del_bak’);

—创建全备作业 call SP_CREATE_JOB(‘full_bak’,1,0,”,0,0,”,0,‘周六2:00做全备’); call SP_JOB_CONFIG_START(‘full_bak’); call SP_ADD_JOB_STEP(‘full_bak’, ‘step1’, 6, ‘01000000/backup/dailybak’, 1, 1, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE(‘full_bak’, ‘step2’, 1, 2, 1, 64, 0, ‘02:00:00’, NULL, ‘2023-07-04 14:00:00’, NULL, ”); call SP_JOB_CONFIG_COMMIT(‘full_bak’);

—创建增量作业 call SP_CREATE_JOB(‘inc_bak’,1,0,”,0,0,”,0,‘周日到周五2:00做增备’); call SP_JOB_CONFIG_START(‘inc_bak’); call SP_ADD_JOB_STEP(‘inc_bak’, ‘step1’, 6, ‘11000000/backup/dailybak|/backup/dailybak/’, 1, 2, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE(‘inc_bak’, ‘step2’, 1, 2, 1, 63, 0, ‘02:00:00’, NULL, ‘2023-07-04 00:00:00’, NULL, ”); call SP_JOB_CONFIG_COMMIT(‘inc_bak’);

—创建定时删除作业 call SP_CREATE_JOB(‘del_bak’,1,0,”,0,0,”,0,‘每天凌晨3点删除14天前的备份’); call SP_JOB_CONFIG_START(‘del_bak’); call SP_ADD_JOB_STEP(‘del_bak’, ‘step1’, 0, ‘SF_BAKSET_BACKUP_DIR_ADD(”DISK”,”/backup/dailybak”); CALL SP_DB_BAKSET_REMOVE_BATCH(”null”,SYSDATE-14);’, 1, 1, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE(‘del_bak’, ‘step2’, 1, 1, 1, 0, 0, ‘03:00:00’, NULL, ‘2023-07-04 00:00:00’, NULL, ”); call SP_JOB_CONFIG_COMMIT(‘del_bak’);

查看作业执行情况 set pagesize 1000 SELECT EXEC_ID,NAME,START_TIME,END_TIME,ERRCODE,JOBID FROM SYSJOB.SYSJOBHISTORIES2 ORDER BY START_TIME;

查看失败作业详细信息 SELECT EXEC_ID,ERRCODE,ERRINFO FROM SYSJOB.SYSJOBHISTORIES2 WHERE ERRCODE !=0;

查看备份任务 SELECT JOB,SCHEMA_USER,LAST_DATE,LAST_SEC,NEXT_DATE,FAILURES,INSTANCE,“INTERVAL” FROM DBA_JOBS;

查看执行内容 SELECT JOB,WHAT FROM DBA_JOBS;

7.配置应用连接,创建dm_svc.conf Linux环境.conf放在应用服务器/etc目录下 Windows32环境.conf放在应用服务器system32目录下 Windows64环境.conf放在应用服务器system32和syswow64目录下

vi /etc/dm_svc.conf TIME_ZONE=(+8:00) LANGUAGE=(cn) DW1=(192.168.56.81:5236,192.168.81.82:5236)

[DW1] LOGIN_MODE=(1) SWITCH_TIME=(300) SWITCH_INTERVAL=(200)

###应用连接 dm.jdbc.driver.DmDriver jdbc:dm://DW1 如果单机配置dm_svc,要注释LOGIN_MODE才能使用,只用到DW1=(192.168.56.81:5236)

########################################选做########################################

1.逻辑备份配置在备库上(可选) vi /dm8/scripts/demo.sh #/bin/bash export LD_LIBRARY_PATH=“LDLIBRARYPATH:/dm8/dbms/bin"exportDMHOME="/dm8/dbms"exportPATH=LD_LIBRARY_PATH:/dm8/dbms/bin" export DM_HOME="/dm8/dbms" export PATH=PATH:DMHOME/bin:DM_HOME/bin:DM_HOME/tool #time CUR_DATE=date +'%Y%m%d%H%M%S' #weekday WEEKDAY_INDEX=date +'%w' echo “###begin exp_full_bak …###” dexp SYSDBA/***********:35231 file=dexp_CJC_CURDATE.dmpdirectory=/backup/dmplog=demo{CUR_DATE}.dmp directory=/backup/dmp log=demo{CUR_DATE}.log OWNER=oracle echo “###delete dmp history file …###” find /backup/dmp -mtime 2 -type f -name “demo.dmp” -exec rm -rf {} ; find /backup/dmp -mtime 2 -type f -name “demo*.log” -exec rm -rf {} ; echo “###end bak …###”

#定时任务授权 chmod +x /dm8/scripts/demo.sh

#配置定时任务,每天晚上23点30分定时执行备份脚本 crontab -e 30 21 * * * su - dmdba -c “/dm8/scripts/demo.sh” 2>/dev/null

#备份报错处理 如果报错:[-7170] failed to connect DMAP. 需要手动启动DmAP服务。 启动服务: which DmAPService find /dm -name DmAP* 需要启动DmAP服务 cd /dm8/bin/ ./DmAPService status ./DmAPService start ./DmAPService status

如果报错:[-718] log collected not consecusive. 可以尝试手动切换归档后进行备份。

SQL> BACKUP DATABASE FULL BACKUPSET '/backup/dmp/CJC_full_bak_20220426';

BACKUP DATABASE FULL BACKUPSET ‘/dm/dmbak/CJC_full_bak_20220426’; [-718] log collected not consecusive. used time: 781.071(ms). Execute id is 0.

手动切换归档

SQL> alter system switch logfile;

2.定时全库收集统计信息(可选) —创建统计信息记录表 drop table MY_TAB_STATS; create table MY_TAB_STATS(tab_num int identity(1,1), tab_name varchar2(100), stat_time timestamp(6), stat_err varchar(1000)); —初始化统计信息记录表 truncate table MY_TAB_STATS; select * from MY_TAB_STATS; insert into MY_TAB_STATS(TAB_NAME) select table_name from all_tables where owner=‘EKP’; update MY_TAB_STATS set stat_time = to_date(‘1970-01-01 00:00:00’); commit;

—开始更新 sf_set_session_para_value(‘HAGR_HASH_SIZE’,100000000); set serveroutput on call stat_zzj(0,100); create or replace procedure stat_zzj(a int,b int) as num_start int; num_end int; BEGIN num_start=a; num_end=b; FOR TB IN ( select tab_num,tab_name from MY_TAB_STATS where tab_num > a and tab_num <b ) loop begin DBMS_STATS.GATHER_TABLE_STATS(‘EKP’,TB.TAB_NAME,NULL,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’); UPDATE MY_TAB_STATS SET STAT_TIME = SYSDATE WHERE TAB_NUM = TB.TAB_NUM; COMMIT; print TB.TAB_NAME||’ Done,Current Time is ’|| sysdate; exception when others then update MY_TAB_STATS SET STAT_TIME = SYSDATE, STAT_ERR = SQLCODE||”||SQLERRM WHERE TAB_NUM = TB.TAB_NUM; END; END LOOP; END;

—创建定时收集统计信息的作业 call SP_CREATE_JOB(‘stat_zzj’,1,0,”,0,0,”,0,”); call SP_JOB_CONFIG_START(‘stat_zzj’); call SP_JOB_SET_EP_SEQNO(‘stat_zzj’,0); call SP_ADD_JOB_STEP(‘stat_zzj’, ‘step1’, 0, ‘call stat_zzj(0,100);’, 0, 0, 0, 0, NULL, 0); call SP_ADD_JOB_SCHEDULE(‘stat_zzj’, ‘step2’, 1, 0, 0, 0, 0, NULL, NULL, ‘2023-05-31 22:00:00’, NULL, ”); call SP_JOB_CONFIG_COMMIT(‘stat_zzj’);

基础备份调优
https://blog.newworld.help/posts/基础备份调优/
作者
勇敢DBA不怕困难
发布于
2024-02-13
许可协议
CC BY-NC-SA 4.0