刚刚接触DB2,对DB2的备份恢复机制不是太熟悉,相关的资料又太少,只好自己慢慢摸索了。
需求
对生产库进行在线压缩备份,备份中包含归档日志,定期将生产库备份恢复到测试环境,确保测试环境采用最新的生产数据。
备注:生产环境与测试环境中,数据文件存储路径不一致,在恢复过程中应注意。
环境
OS:
$ oslevel -s
6100-06-06-1140
数据库:
$ pwd
/opt/IBM/db2/V9.8FP5/install
$ ./db2ls
Install Path Level Fix Pack Special Install Number Install Date Installer UID
---------------------------------------------------------------------------------------------------------------------
/opt/IBM/db2/V9.8 9.8.0.4 4 12 Mon Jun 4 16:19:38 2012 +0800 0
/opt/IBM/db2/V9.8FP5 9.8.0.5 5 Fri Jul 13 15:22:55 2012 +0800 0
$ db2instance -list
ID TYPE STATE HOME_HOST CURRENT_HOST ALERT PARTITION_NUMBER LOGICAL_PORT NETNAME
-- ---- ----- --------- ------------ ----- ---------------- ------------ -------
0 MEMBER STARTED SXYCDBM0 SXYCDBM0 NO 0 0 SXYCDBM0-ib0
1 MEMBER STARTED SXYCDBM1 SXYCDBM1 NO 0 0 SXYCDBM1-ib0
128 CF PRIMARY SXYCDBF0 SXYCDBF0 NO - 0 SXYCDBF0-ib0,SXYCDBF0-ib1
129 CF PEER SXYCDBF1 SXYCDBF1 NO - 0 SXYCDBF1-ib0,SXYCDBF1-ib1
HOSTNAME STATE INSTANCE_STOPPED ALERT
-------- ----- ---------------- -----
SXYCDBF1 ACTIVE NO NO
SXYCDBF0 ACTIVE NO NO
SXYCDBM1 ACTIVE NO NO
SXYCDBM0 ACTIVE NO NO
备注:这是一个2个Member和2个CF的pureScale环境。
备份:
$ db2 backup db $DBNM online to /db2fs/db2backup/backup compress INCLUDE LOGS
Backup successful. The timestamp for this backup image is : 20120731182910
备注:在线、压缩备份,备份image中包含备份期间产生的所有归档日志
可以使用以下脚本来获取数据库的各种文件的存储路径DBPATH、LOGPATH、DB_STORAGE_PATH
db2 "select substr(type,1,20) as type, substr(path,1,80) as path from sysibmadm.dbpaths order by type"
恢复
将生产库的备份集ftp到测试环境,开始恢复数据库
1. 还原数据文件
db2 restore db $DBNM from /db2fs/db2backup/yuch/20120731 on /db2fs/sxdata DBPATH ON /db2fs/sxlog NEWLOGPATH /db2fs/sxlog/db2sdin1/SX2/DBPARTITION0000/LOGSTREAM0000/
备注:
测试环境的数据库存储路径、数据文件存储路径,以及在线日志的存储路径与生产环境不一致,在恢复过程中需要修改路径。
/db2fs/sxdata为DB_STORAGE_PATH,即数据库存储路径
/db2fs/sxlog为DBPATH,即数据文件的存储路径
/db2fs/sxlog/db2sdin1为NEWLOGPATH,即在线日志存储路径
2.还原归档日志文件
db2 restore db $DBNM logs from /db2fs/db2backup/yuch/20120731 logtarget /db2fs/db2backup/archive_log/sx2/db2sdin1/SX2
备注:
将备份集中的归档日志还原到指定目录
logtarget即新指定的归档日志路径
3.前滚数据库到备份结束时间点
$ db2 "rollforward db sx2 to end of logs and stop overflow log path (/db2fs/db2backup/archive_log/sx2)"
Rollforward Status
Input database alias = sx2
Number of members have returned status = 2
Member ID Rollforward Next log Log files processed Last committed transaction
status to be read
----------- -------------------------- ------------------- ------------------------- --------------------------
0 not pending S0000095.LOG-S0000095.LOG 2012-07-31-03.22.53.000000 UTC
1 not pending S0000313.LOG-S0000313.LOG 2012-07-31-03.22.53.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
备注:在DB2中,rollforward操作类似于Oracle的recover操作,整个过程就是把备份期间产生的归档日志都应用到数据库中。
rollforward命令中需要指定归档日志的目录。
至此测试环境数据库恢复完毕。