DB2备份
1、 离线全备份
1) 首先确保没有用户使用DB2:
db2 list applications for db sample
2) 停掉数据库并重新启动,以便断掉所有连接:
db2stop force
db2start
3) 执行备份命令:(使用TSM作为备份的介质)
db2 backup db sample use tsm
备份成功,将会返回一个时间戳。
4) 检查备份成功:
db2 list history backup all for sample ,可以看到多了这个备份的纪录。
db2adutl query命令也可以看到返回值。
5) 备注:
首先对主节点(catalog表空间在的节点)执行备份命令,再对另外的节点也做这个操作。
2、 在线备份:
1) 首先打开一下支持在线备份的数据库配置参数:
db2 update db cfg for sample using userexit on -- 启用用户出口
db2 update db cfg for sample using logretain on -- 启用归档日志
db2 update db cfg for sample using trackmod on -- 启用增量备份功能
(需要各个年node都分别做设置)
开启这些参数后,数据库处于backup pending状态,要求做数据库的离线全备份
做一次离线全备份,也只有做了离线全备份,离线备份的命令参考第一步的内容,数据库才能继续使用。参考上面的命令。
2) 在线备份命令如下
db2 backup db sample to /home/db2inst1/db2backup online use tsm
备份成功,返回一个时间戳。
3) 同样可以用db2adutl 和db2 list history察看备份纪录。
4) 备注:同样,对每个节点都做这个操作。
3、 线增量备份
1) 在开启了必须的三个参数的情况下,做增量备份:
db2 backup db sample online incremental use tsm
备份成功,返回一个时间戳
2) 同样可以用db2adutl 和db2 list history察看备份纪录。
3) 还有一种delta的备份:
db2 backup db sample online
incremental delta use tsm
4) 这两种备份的区别,类似Oracle Exports的Incremental和Cumulative方式,db2的incremental对应oracle的cumulative方式,而db2的delta方式则对应oracle的incremental方式。
5) 备注:同样,对每个节点都做这个操作。
4、 还原数据库
1) 开始还原,先断开现有数据库连接
db2 "disconnect all"
2) 先新建一个数据库作为覆盖还原的目标数据库
db2 "create db sample on d: using codeset gbk territory cn"
3) 将源数据库aic_jx_3在20070726131128做的备份覆盖还原到aic_jx_4,并且使用重定向(注意:20070726131128需要根据实际备份日期进行修改)
db2 "restore db sample_1 from D:/DB2DBBACKUP taken at 20070726131128 to d:into aic_jx_4 replace existing redirect"
4) 针对源数据库的表空间存储进行重定向设定,可以调整使用FILE的DMS类型表空间的大小
db2 "set tablespace containers for 2 using (file 'userspace1.dat' 128000 )"
db2 "set tablespace containers for 3 USING (FILE 'indexspace1.dat'128000)"
db2 "set tablespace containers for 4 USING (FILE 'userspace2.dat'64000)"
db2 "set tablespace containers for 5 USING (FILE 'cdspace2.dat'16384)"
db2 "set tablespace containers for 6 USING (path 'SQLT0002.0')"
db2 "set tablespace containers for 7 USING (path 'SYSTOOLSPACE')"
db2 "set tablespace containers for 8 USING (path 'TEMPUSESPACE1')"
db2 "set tablespace containers for 9 USING (path 'USERSPACE3')"
db2 "set tablespace containers for 10 USING (path 'aic_jx_user_tmp')"
db2 "set tablespace containers for 11 USING (path 'aic_jx_large_T')"
db2 "set tablespace containers for 12 USING (path 'aic_jx_large_U')"
(具体表空间的多少,应该和源数据库一致)
5) 开始还原过程
db2 "restore db aic_jx_3 continue"
6) 还原结束激活数据库
db2 "activate db aic_jx_4"
一些辅助的命令
db2 "get db cfg for aic_jx_4"
db2 "update db cfg for aic_jx_4 using locklist 50"
db2 "list utilities show detail"
5、 恢复数据库
1) 手工drop数据库,模拟灾难恢复的情况,执行如下操作:
db2 drop db sample
2) 恢复备份历史纪录(每次backup,不论类型,都会备份历史纪录文件)。这里的时间戳应该是最新的:
db2 restore db sample history file use tsm
taken at 20030102223107 buffer 100
3) 使用db2的恢复帮助工具:
db2ckrst -d sample -t 20030101224424 -r database
命令返回建议的必需的恢复操作命令。
4) 按照帮助工具的提示,先做版本恢复,恢复命令如下:
db2 restore db sample incremental use tsm taken at 20030101224424 buffer 100
同样先做主节点的恢复,再做其他节点的恢复操作。
5) 这时数据库处于rollforward-pending state的状态,需要做roll forward 操作:
db2 rollforward db sample to 2003-01-12 - 13.27.25 .000000 on all nodes and stop
前滚到同一个时间点。这个操作要在主节点来做。
6、 关于数据库备份选择的时间等:
1) 在数据库维护的过程中,数据库的备份对于在灾难面前对数据的恢复是至关重要的,可以说,没有备份,就没有恢复的可能。
2) 但备份,我们要考虑几个事情:
a) 数据库本身的大小,
b) 备份的周期。
c) 数据库越大,需要的备份设备越大,备份的时间越长。
3) 一般可建议的做法:
a) 每周做一次完全备份
b) 没天做一次增量备份
c) 做这些备份的动作用Linux本身的服务来完成
7、 关于DB2的归档日志问题:
1) 第一活动日志文件(First active log file)=S0000091.LOG
2) 每个日志文件的大小和日志文件的多少的设置原则:
a) 日志文件能够保存每两次数据库完全备份间的修改
b) 维护日志的时候,把那些无用的日志给删除掉。
c) 进行了日志相关的参数修改后,需要进行数据库的重启,数据库重启,如果设置的日志比较大的话,重启的时间可能比较长,也许会操作4个小时。
8、 说明:
1) 恢复操作也有online和offline的,区别等同backup的操作。
2) 按照表空间的备份和恢复类似,加子句TABLESPACE ( tablespace-name 即可。表空间级别的备份/恢复操作要求数据库处于归档日志和启用增量备份模式下。
3) 恢复的例子中只做了版本恢复。若还有更新的全备份和增量备份的image,可以依次做恢复(请注意使用db2ckrst的建议恢复次序和次数)之后,最后做roll forward.
db2 rollforward db sample to end of logs
ROLLFORWARD DATABASE sample COMPLETE
or
db2 rollforward db sample to end of logs and complete
把原数据库中的日志复制过来,拷贝到服务器的一个目录下,执行下面的命令:
db2 rollforward database TFD to end of logs and complete OVERFLOW LOG PATH (log-directory)
在还原完成之后,在
Connect to TFD 时候显示说缓冲池有错误,这个应该是还原上去的的库和原来存在的库不一样的情况,这个时候,可通过下面的方式来解决
force application all
db2set DB2_OVERRIDE_BPF=10000
db2stop
db2start
再连接
Connect to TFD,应该可以成功了。。。