已索引
应该根据实际情况选择数据库的备份方式,如逻辑备份或物理备份、Job或者Crond、备份软件统一备份等。
本文可作为备份方案的一个参考。
Crond 备份
数据库备份脚本:
# cat /home/dmdba/tools/backup_db.sh
#!/bin/bash
source /home/dmdba/.bash_profile
cd /home/dmdba/tools/
# 登录信息
username=SYSDBA
passwd=xxxxxxxx
ipaddr=localhost
port=5236
# 达梦bin目录
DMPATH=/dmdb/dmdbms/bin
# 设置生成文件的目录
FILE_DIR="/orabak/rman"
# 设置生成文件的前缀和后缀
FILE_PREFIX="DB_DMDB_FULL_"
# 设置保留文件的最大天数
MAX_DAYS=7
# 备份数据
backup_sql="backup database full to \"${FILE_PREFIX}$(date +%Y_%m_%d_%H_%M_%S)\" backupset '${FILE_DIR}/${FILE_PREFIX}$(date +%Y_%m_%d_%H_%M_%S)' compressed level 1;"
# 新增备份
$DMPATH/disql SYSDBA/"$passwd"@$ipaddr:$port -e "$backup_sql"
# 删除历史备份
find "$FILE_DIR" -type d -name "${FILE_PREFIX}*" -mtime +$MAX_DAYS -exec rm -rf {} \;
exit
数据库归档备份脚本:
# cat /home/dmdba/tools/backup_arch.sh
#!/bin/bash
source /home/dmdba/.bash_profile
cd /home/dmdba/tools/
# 登录信息
username=SYSDBA
passwd=xxxxxxxx
ipaddr=localhost
port=5236
# 达梦bin目录
DMPATH=/dmdb/dmdbms/bin
# 设置生成文件的目录
FILE_DIR="/orabak/rman"
# 设置生成文件的前缀和后缀
FILE_PREFIX="ARCH_DMDB_"
# 设置保留文件的最大天数
MAX_DAYS=7
# 备份数据
# 注意:如果有 delete input 的话,可能在备库停机期间删除主库的归档,导致备库日志缺失而不能同步,需要重建备库。
# 建议不要使用 delete input,同时,在归档的 REALTIME 部分增加 ARCH_STANDBY_APPLY = 1 参数。
backup_sql="backup archivelog all NOT BACKED UP delete input to \"${FILE_PREFIX}$(date +%Y_%m_%d_%H_%M_%S)\" backupset '${FILE_DIR}/${FILE_PREFIX}$(date +%Y_%m_%d_%H_%M_%S)';"
# 新增备份
cd ${DMPATH}
$DMPATH/disql SYSDBA/"$passwd"@$ipaddr:$port -e "$backup_sql"
# 删除历史备份
find "$FILE_DIR" -type d -name "${FILE_PREFIX}*" -mtime +$MAX_DAYS -exec rm -rf {} \;
为数据库备份和归档日志备份设置两个计划任务:
$ crontab -l
01 04 * * * /home/dmdba/tools/backup_db.sh > /dev/null 2>&1
*/20 * * * * /home/dmdba/tools/backup_arch.sh > /dev/null 2>&1
DM Job
建议使用图形界面来配置Job。
--开启代理
SP_INIT_JOB_SYS(1);
--设置全量备份
call SP_CREATE_JOB('full_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('full_bak');
call SP_ADD_JOB_STEP('full_bak','a', 6,'06080000/dmdb/dmdata/DAMENG/bak', 1, 1, 1, 1,NULL, 0);
call SP_ADD_JOB_SCHEDULE('full_bak','b', 1, 2, 1, 1, 0,'23:30:00',NULL,'2023-11-29 16:59:50',NULL,'');
call SP_JOB_CONFIG_COMMIT('full_bak');
--设置增量备份
call SP_CREATE_JOB('inc_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('inc_bak');
call SP_ADD_JOB_STEP('inc_bak','a', 6,'16080000/dmdb/dmdata/DAMENG/bak|/dmdb/dmdata/DAMENG/bak', 1, 1, 1, 1,NULL, 0);
call SP_ADD_JOB_SCHEDULE('inc_bak','b', 1, 2, 1, 126, 0,'23:40:00',NULL,'2023-11-29 17:01:20',NULL,'');
call SP_JOB_CONFIG_COMMIT('inc_bak');
--设置定时清理
call SP_CREATE_JOB('clear_bak',1,0,'',0,0,'',0,'');
call SP_JOB_CONFIG_START('clear_bak');
call SP_ADD_JOB_STEP('clear_bak','a', 0,'SP_DB_BAKSET_REMOVE_BATCH(null,sysdate-7)', 1, 1, 0, 0,NULL, 0);
call SP_ADD_JOB_SCHEDULE('clear_bak','b', 1, 1, 1, 0, 0,'23:50:00',NULL,'2023-11-29 17:02:52',NULL,'');
call SP_JOB_CONFIG_COMMIT('clear_bak');