Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1893951
  • 博文数量: 389
  • 博客积分: 7877
  • 博客等级: 少将
  • 技术积分: 4521
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-10 14:02
文章分类

全部博文(389)

文章存档

2024年(1)

2022年(1)

2021年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(4)

2015年(8)

2014年(15)

2013年(31)

2012年(19)

2011年(47)

2010年(33)

2009年(105)

2008年(109)

2007年(4)

分类:

2009-07-13 15:04:41

说来惭愧啊, db2 v8.2现在已经没有官方的support了,而我直到现在才算搞懂db2的备份与恢复!

不管怎样,其实现在很多系统仍然在用着db2 v8版本的数据库,下面的整理是根据本人自己的理解,以及参考了IBM相关文档,请根据自己的具体情况对待。


问题的缘由:
在客户那里遇到需要恢复db2数据库,客户那里的备份是online的,且跟了include logs的选项,我在此之前我还没有仔细看过db2备份和恢复的文档,这里我不知道如何对这样的备份文件进行恢复,现在终于搞懂了,其实需要先将log文件从备份文件里面retrieve出来,再对log文件进行rollforward

4. To produce a backup image, which includes logs, for transportation to a remote site:
backup db sample online to /dev3/backup include logs
To restore that backup image, supply a LOGTARGET path and specify this path during ROLLFORWARD:
restore db sample from /dev3/backup logtarget /dev3/logs
rollforward db sample to end of logs and stop overflow log path /dev3/logs

上面的文字来源于IBM DB2 UDB Command Reference Version 8.2

下面整理一下关于db2备份与恢复的各种情况:
先要知道db2有两种日志方式: "archival logging" "Circular logging"
另外db2的备份方式也有两种: online backup和offline backup
db2下面创建数据库时default的配置就是"Circular logging"的方式,这种模式下面是不可以进行online的备份的,只能进行offline的备份,即在数据库备份这段时间里面数据库对外不提供任何服务,应用程序无法连接至数据库。
1. 所以在"Circular logging"的模式下面能进行的只能是offline的备份
db2 backup db dbname to /fs
db2 restore db dbname from /fs taken at TIMESTAMP without rolling forward

2. 如果需要做online的备份,则需要启用"archival logging"的模式,通过更改LOGRETAIN或者USEREXIT的值可以达到目的,更改完参数后需要对数据库进行离线全备份;然后就可以访问数据库了,当对数据库进行一些相关操作后,需要再次对数据库进行备份时,这里要区分的情况就多了:

首先,在"archival logging"的模式下面可以进行online的备份也可以进行offline的备份,备份可以是全量或者增量,增量里面又分incremental和incremental delta两种,其区别就是incremental delta只备份上个备份版本以来的变化,而incremental则备份自上个全量备份以来变化的数据;

* 对于offline备份:
1. db2 backup db dbname to /fs
   db2 restore db dbname from /fs taken at 20090710114049 without rolling forward

2. db2 backup db dbname to /fs
   db2 backup db dbname incremental to /fs
   db2 restore db dbname incremental automatic from /fs taken at 20090710114049 without rolling forward(taken at后面跟的时间为incremental备份的时间)

3. db2 backup db dbname to /fs
   db2 backup db dbname incremental delta to /fs
   db2 restore db dbname incremental automatic from /fs taken at 20090710114049 without rolling forward(taken at后面跟的时间为incremental delta备份的时间)


* 对于online备份:
备份的时候除了备份数据库之外,还得考虑log文件,日志文件又分active log和archive log其区别就是
。。。
所以备份的时候,还需要注意如何处理active log和archive log, 这里尤其重要的是在对数据库备份的这段时间里面产生的log文件,通常是active log里面的一个S*.LOG文件,也有可能占用几个S*.LOG文件,这取决于备份期间有没有大的事务在处理, 为了更加简洁方便的操作,IBM在db2 v8.1 fixpak ??后面新增了include logs选项,从字面意思来看,其实就是在备份数据库期间把这一段时间里面产生的active log也备份到备份文件里面,在恢复数据库时先从备份文件里面retrieve log文件,然后再回滚log文件,这里需要用到LOGTARGET的选项,可以把这个指定到我们恢复出来的arclog的路径下面,然后直接回滚至最新或者指定时间,即可成功恢复数据库。

4. db2 backup db dbname online to /fs include logs
   db2 restore db dbname from /fs taken at 20090710114049 logtarget /target_dir
   db2 rollforward db dbname to end of logs and stop overflow log path'(/target_dir)'

5. db2 backup db dbname online incremental to /fs
   db2 restore db dbname from /fs taken at 20090710114049
   db2 rollforward db dbname to yyyy-mm-dd.hh.mm.ss.nnnnnn and stop overflow log path'(/logs)'

6. db2 backup db dbname online incremental delta to /fs
   db2 restore db dbname from /fs taken at 20090710114049
   db2 rollforward db dbname to end of logs and stop overflow log path'(/logs)'

PS: db2 rollforward db rordb99 to 2010-09-25-11.00.00.000000 using local time and stop overflow log path'(/softinstall/rordb99log)'

* 怎么处理数据库备份文件和archive log文件?
logretain的字面意思是保留log文件,可问题是怎么保留,一直存放在硬盘上面吗?我们对数据库进行的online全备份或者再加上增量备份的数据,形成一个个的版本,而一般情况下都无需保留所有版本的数据,可以保留最近两三个版本的备份数据,好那么我们会删除数据库的备份文件,但是arclog文件呢?怎么删除,我们知道arclog文件的命名是按顺序来的,我们怎么知道其中的一个文件是在哪个备份版本后面产生的,这里可以用到下面这个命令:
db2 list history backup all for dbname

从这里面可以查找和有用的备份相关的归档日志,对于失效备份对应的归档日志可以rm掉!

阅读(1797) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~