1. 备份恢复
1.1. 备份策略
备份架构: LAN-Free 备份
备份方式:利用 NBU 直接备份到虚拟带库,然后通过 Vault 将备份数据保存到磁带库
备份周期:以周为备份周期,每周六,周三全备,其他每天增量备份
保存周期:虚拟带库保存 1 个月,磁带库上保存 3 个月。
备份内容:数据库 + 归档日志 + 配置参数
1) 数据库周六晚 21:00 开始做全备份,周三,周六做增量备份。
db2 update db cfg for JGEMLCDB using trackmod o n (参数修改及确认,增量备份需要 trackmod 为 on )
db2 BACKUP DATABASE $MY_DB2 online $MY_SCHED LOAD $MY_LIB OPEN 4 SESSIONS BUFFER 1024
2 )归档日志 4 小时备份一次,经过沟通,把归档日志使用文件的方式进行差异化备份,操作系统保留三天的归档日志。
3 ) NBU 全备份及增量备份脚本内容如下:
MY_DB2=JGEMLCDB
MY_LIB=/usr/openv/netbackup/bin/nbdb2.sl64
MY_SCHED 取变量判断如下
if [ "$DB2_FULL" = "1" ] ; then
MY_SCHED=""
elif [ "$DB2_CINC" = "1" ] ; then
MY_SCHED="INCREMENTAL"
elif [ "$DB2_INCR" = "1" ] ; then
MY_SCHED="INCREMENTAL DELTA"
else
MY_SCHED=""
fi
NBU 备份脚本中的备份语句
CMD_LINE="db2 BACKUP DATABASE $MY_DB2 online $MY_SCHED LOAD $MY_LIB OPEN 4 SESSIONS BUFFER 1024"
4 )实施过程:
在做 NBU 备份前,需要进行本地磁盘的离线全库备份,否则 NBU 实施过程中会报 SQL1035N 错误,如下
SQL1035N The operation failed because the specified database cannot be
connected to in the mode requested. SQLSTATE=57019
本地磁盘备份,在应用不断开情况下,实验脚本执行如下命令(避免应用自动连接导致最后一句执行失败)
db2 connect reset
db2 force application all
db2 DEACTIVATE DATABASE JGEMLCDB
db2 backup db JGEMLCDB to /db2data
以上成功之后,再做 onling 备份
db2 backup db JGEMLCDB online to /db2data
然后通过 NBU 进行备份
5 )归档日志备份删除
i )通过 NBU 备份删除,需要修改参数, logarchmeth1 ,以 vendor 方式归档到磁带中,进行备份删除管理,但是本地磁盘 /db2arclog/ 看不到归档日志
db2 update db cfg for JGEMLCDB using logarchmeth1 vendor:/usr/openv/netbackup/bin/nbdb2.sl64
ii )经过沟通,归档日志放在本地磁盘,通过 NBU 使用文件的方式进行差异化备份,操作系统保留三天的归档日志。
修改参数
db2 update db cfg for mtrdb using logarchmeth1 Disk:db2arclog/
手工归档到本地磁盘,进行确认产生归档日志
db2 archive log for db JGEMLCDB
建立删除的脚本及任务计划(在 member0 , member1 都操作)
删除 3 天前的归档日志
mkdir /home/db2sdin1/scripts
cd /home/db2sdin1/scripts
vi /home/db2sdin1/scripts/archlog_delete.sh
#!/bin/sh
find /db2arclog/db2sdin1/JGEMLCDB/NODE0000/LOGSTREAM0000/C0000001 -name "*.LOG" -type f -mtime +3 -exec rm {} \;
find /db2arclog/db2sdin1/JGEMLCDB/NODE0000/LOGSTREAM0001/C0000001 -name "*.LOG" -type f -mtime +3 -exec rm {} \;
crontab -e
10.49.2.10
#0 21 * * * sh /home/db2sdin1/scripts/archlog_delete.sh
10.49.2.20
0 21 * * * sh /home/db2sdin1/scripts/archlog_delete.sh
1.2. 恢复策略
优先采用备份介质恢复,这事最方便的方式。其次,在出现重大灾难的时候,考虑从 HADR 备库接管,这种方式有一定风险。
需要 确保 数据库参数trackmod 设置为 on ,在备份软件里面设置 2 个调度策略。
Db2 分三种恢复方式,如下:
恢复类型:
DB2 考虑到了下列恢复类型:
崩溃恢复。这种类型的恢复通过撤销(回滚)未提交的事务来防止数据库处于不一致状态。 请再次考虑上一页中的示例。如果在 COMMIT 语句之前发生电源故障, 那么下一次 DB2 重新启动,再访问该数据库时, DB2 将先回滚( ROLLBACK ) INSERT 语句, 然后回滚( ROLLBACK ) DELETE 语句。(注:回滚语句的顺序与最初执行时的顺序相反。)
版本恢复。这种类型的恢复通过使用从 BACKUP 命令获取的备份映像来恢复先前的数据库版本。 恢复的数据库将包含在执行 BACKUP 命令时所处状态的信息。 如果在执行备份之后针对数据库执行进一步操作,那么该信息将丢失。
前滚恢复。这种类型的恢复通过使用完全数据库备份,结合日志文件来扩展版本恢复。 必须先恢复备份以用作基线;然后在该备份之上应用日志。 该过程会将数据库或表空间恢复到某个特定时间点。前滚恢复要求启用归档日志记录 。我们将在本教程的稍后部分中讨论归档日志记
以上第一种崩溃恢复是重启 db2 之后,实例内部操作,无需人工干预。人工考虑需要的恢复通常是后两种恢复方式,这两种对应完全恢复和不完全恢复。
恢复步骤:
1. 先 restore 备份 + 归档日志,其中 logtarget 指定恢复出来的归档日志存放地方
db2 "restore database mtrmlc from /data/backup taken at 201 6 0331234149 logtarget /data/backup/logs”
1. 然后考虑如下三种恢复级别
1) 最大程度的恢复,即 restore 全备份 + 增量备份 + 归档日志 + 遍历所有归档及在线日志 Rollforward 指定 to end of logs and complete
1) 基于一部分损失的恢复,指定到相应时间,这个时间应该大于备份结尾,小于最大程度的恢复,否则报错, to time using local time ,如下:
db2 "rollforward DATABASE test to 20140828110021.000000 using local time"
2) 最小程度的恢复,即恢复到备份结束的时间点
Rollforward 指定 to end of backup and stop
1.3. 备份恢复示例
从备份介质恢复:全备 + 前滚日志
例如:
1) 数据库备份时必须要加上 online 和 include logs 选项
db2 backup database mtrmlc online to /data/backup include logs
1) 数据库恢复:
db2 "restore database mtrmlc from /data/backup taken at 201 6 0331234149 logtarget /data/backup/logs”
2) 恢复日志:
db2 "rollforward database JGEMLCDB to end of logs and complete overflow log path (/data/backup/logs)"
4 )在测试环境进行 NBU 备份恢复测试工作
i) 通过 NBU 调用备份
ii) 进行恢复,恢复语句通过 load 指定调用带库
db2 restore db mtrdb load /usr/openv/netbackup/bin/nbdb2.sl64
db2 rollforward db mtrdb to end of logs and complete
5 )在测试环境进行本地磁盘的备份恢复测试
db2 backup db mtrdb to /db2back
db2 restore db mtrdb from /db2back taken at 20160309174736
db2 "rollforward database mtrdb to end of logs and complete"