文档章节

DB2 rollforward 命令使用详解

Goopand
 Goopand
发布于 2015/04/20 15:18
字数 3133
阅读 58
收藏 0

引言

在数据库成为存储企业数据的载体时,如何恢复数据成为大家比较关心的话题。在 DB2 中恢复数据的种类很多,本文主要介绍数据 DB2 rollforward 的使用说明,并使用 DB2 V97 做了一些实例分析,使读者更好的了解和掌握 rollforward 的使用。

回页首

Recovery 介绍

DB2 中有四种恢复数据库的方式,以下对其进行介绍说明:

  • Crash Recovery 是指在事务处理过程中被中断,从而可能造成数据不一致,不可用。这时 Crash Recovery 就会保护数据库,避免造成数据不一致,不可用的情况。

  • High Availability Disaster Recovery 是指高可用性灾难恢复(HADR),其通过将数据从源数据库复制到目标数据库来防止灾难性的数据丢失。

  • Version Recovery 是对备份介质的恢复,主要是 restore 命令。

  • Rollforward Recovery,一般是当数据库备份后,又执行了一些新事务,如果这时发生了存储故障或误操作,在 restore 之后使用 rollforward 就可以对这些新事务进行修复,本文主要介绍这种恢复方式。

回页首

rollforward 准备工作

rollforward 只能在数据库 recoverable 状态下使用,即采用归档日志,参数 logarchmeth1 或者 logarchmeth2 为非 OFF 的状态。

首先需要修改参数,使得数据库在 recoverable 状态下。

清单 1. 修改参数 LOGARCHMETH1
 db2 "update db cfg for $db using logfilsiz 4 LOGARCHMETH1 disk:$archivePath"

如果修改参数前 logarchmeth1 为 OFF,修改参数后,数据库处于 backup pending 状态,需要进行 offline backup 来使数据库可用。

清单 2. 备份数据库
 db2 "backup db $db to $backupPath"

备份好数据库后执行一些事务,例如简单事务操作 create table,insert,update,delete 等等。然后 Restore 数据库,如果是 tablespace 级别的 rollforward,还可以用其他方式来使表空间处于 rollforward-pending 状态。

清单 3. 恢复数据库
 db2 "restore db $db from $backdir without prompting"

如果使用 restore db 时指定 WITHOUT ROLLING FORWARD 参数,则不能使数据库处于 rollforward-pending 状态,从而不能使用 rollforward。这里不指定 WITHOUT ROLLING FORWARD 参数,当数据库或表空间处于 rollforward-pending 状态,就可以对其进行 rollforward 操作了。

回页首

Rollforward 使用介绍

在数据库日志中,记录了对该数据库的所有操作,用 rollforward 可以通过前滚日志把数据库恢复到备份后有日志记录的某一时间点,或者活动日志的末尾。

常用的 rollforward 参数有以下几个:

  • QUERY STATUS,主要查询数据库当前状态。

  • STOP,特指 rollforward 完成,这样就不能在执行任何别的 rollforward 操作了,除非重新 restore 然后 rollforward。

  • CANCEL,取消 rollforward 操作,使进行 rollforward 中的数据库退出 rollforward pending 状态。

  • POINT IN TIME,rollforward 到某一特定时间点。

  • END OF LOGS,rollforward 到活动日志的末尾。

  • ONLINE,使表空间级的 rollforward 在执行时处于 online 状态,允许其他指向数据库的连接。

在分区数据环境中,rollforward 操作必须执行在某个分区上,以下简单进行介绍:

  • point-in-time rollforward 会在所有的 partition 上执行。

  • END OF LOGS rollforward,如果有 ON DATABASE PARTITION 参数,rollforward 只在指定 partition 上运行,如果没有指定 partition,那么会在所有 partition 上生效。

  • end of backup 会影响所有的 partition。

综合上述参数,可以把 rollforward 分为两种类型,数据库级别的 rollforward 和表空间级的 rollforward。数据库级的 rollforward 需要数据库首先 restore,从而使数据库处于 rollforward pending 状态。而表空间级的 rolllforward 并不是只有 restore 才能成为 rollforward pending 状态,比如突然断电或者其他情况等等也可能使表空间进行 rollforward 操作。

当执行 rollforward 时,如果是数据库在 rollforward pending 状态,则进行数据库级 rollforward。如果执行完后某些表空间还是 rollforward pending 状态,则要执行表空间级的 rollforward 来使这些表空间恢复。在表空间级的 rollforward 中,可以指定表空间来进行 rollforward,如果未指定,则所有处于此状态的表空间都会进行 rollforward。如果在 backup 后,更改了一个表空间的名字,那么在 rollforward 该表空间时需要使用新的表空间名字。

数据库级 rollforward 和表空间级还有一点不同就是,数据库级进行 rollforward 时该数据库不能进行其他连接操作,也就是必须断开其他连接才能进行数据库级的 rollforward。而表空间级的可以选择其他操作能否进行。

不能取消正在进行的 rollfoward 操作,只能在 rollfoward 完成后,使用 rollforward cancel 来取消还没有 stop 的 rollforward,如果已经有 stop 了,就不能 cancel 了。

回页首

rollforward 案例分析

Tablespace rollforward 实例

当数据库的数据量较大时,数据库的全备份和恢复都非常消耗时间,这时通过表空间备份可以快速恢复数据库。

在这个例子中,Restore 三个表空间,使用 rollforward to the end of the logs 前滚一个表空间到活动日志的末尾,然后使用 to the end of the logs and stop 前滚另外两个表空间到活动日志的末尾。

作为 restore 和 rollforward 的先决条件,首先需要 backup 每一个表空间,如清单 4 所示。

清单 4. Backup 表空间
 db2 "update db cfg for test using logfilsiz 4 LOGARCHMETH1 disk:$archivePath"
 db2 "backup db test to $backupPath"
 db2 "connect to test"
 db2 "create tablespace tbs1"
 db2 "create tablespace tbs2"
 db2 "create tablespace tbs3"
 db2 "backup db test tablespace(tbs1) to $backupPath/tbs1"
 db2 "backup db test tablespace(tbs2) to $backupPath/tbs2"
 db2 "backup db test tablespace(tbs3) to $backupPath/tbs3"

图 1 显示了备份结果。

图 1. Backup tablespace

图 1. Backup tablespace

备份之后可以在指定的目录中看到相应的备份影像。

清单 5 显示了对三个表空间创建表和插入数据的操作清单。

清单 5. 操作表空间
 db2 "connect to test"
 db2 "create table t1(a int) in tbs1"
 db2 "create table t2(a int) in tbs2"
 db2 "create table t3(a int) in tbs3"
 db2 "insert int t1 values(1)"
 db2 "insert int t2 values(2)"
 db2 "insert int t3 values(3)"

操作完成后,可以通过刚才的备份影象对三个表空间进行 restore。要注意恢复的备份影像一定要和所恢复的表空间对应,不然就会恢复失败,如清单 6 所示。

清单 6. Restore 三个表空间
 db2 "restore db test tablespace(tbs1) from $backupPath/tbs1 without prompting"
 db2 "restore db test tablespace(tbs2) from $backupPath/tbs2 without prompting"
 db2 "restore db test tablespace(tbs3) from $backupPath/tbs3 without prompting"

图 2 显示了操作表空间和恢复表空间的结果。

图 2. 插入数据后恢复表空间

图 2. 插入数据后恢复表空间

恢复成功之后,三个表空间都处于 rollforward pending 状态,用户无法访问,状态如图 3 所示。

图 3. 验证表空间 rollforward-pending 状态

图 3. 验证表空间 rollforward-pending 状态

清单 7 显示了访问表空间的命令。

清单 7. 访问表空间
 db2 "connect to test"
 db2 "select * from t1"
 db2 "select * from t2"
 db2 "select * from t3"

此时需要做前滚操作使表空间回到可用状态,如清单 8 所示。

清单 8. 前滚表空间并验证结果
 db2 "rollforward db test to end of logs tablespace(tbs1) online"
 db2 "rollforward db test to end of logs and stop tablespace(tbs2, tbs3) online"
 db2 "connect to test"
 db2 "select * from t1"
 db2 "select * from t2"
 db2 "select * from t3"

图 4 正确返回对表的操作结果,说明 rollforward 成功。

图 4. 验证结果

图 4. 验证结果

rollforward query status 实例

rollforward 命令的 query status 选项可用于列出如下一些当前数据库的信息。

  1. DB2 已经前滚的日志文件。

  2. 需要的下一个归档日志文件。

  3. 自前滚处理开始以来最近提交的事务的时间戳。

下面使用清单 9 来查询数据库状态。

清单 9. 前滚数据库并查询状态
 db2 "rollforward db test query status"

图 5 中显示 DB pending 状态的数据库,实际上是处于 rollforward pending 状态。需要前滚数据库,使数据库回到正常状态。

图 5. Check Rollforward Pending Status

图 5. Check Rollforward Pending Status

rollforward cancel 实例

在进行 cancel 操作前,先执行最基本的操作,db2 rollforward db $db to end of logs,操作完成后所有在数据库备份后写的日志文件都会前滚,如图 6 所示。

图 6. Rollforward to end of logs

图 6. Rollforward to end of logs

接下来执行 db2 rollforward db $db cancel 操作,即取消前滚操作。执行之后前面所做的所有前滚操作都将回滚,数据库重新处于 restore-pending 状态,此时任何连接都被拒绝。

清单 10 列出了取消前滚并进行 restore 的命令。

清单 10. cancel rollforward and restore
 db2 "rollforward db test cancel"
 db2 "connect to test"
 db2 "restore db test from $backupPath without prompting"
 db2 "connect to test"

当刚取消前滚时,由于数据库处于 restore pending 状态,无法连接上数据库,如图 7 所示。

图 7. Restore Pending 状态

图 7. Restore Pending 状态

重新执行 restore 操作,db2 restore db $db from $backdir without prompting,

此时数据库处于 rollforward-pending 状态,此时任何连接都被拒绝,如图 8 所示

图 8. Rollforward Pending 状态

图 8. Rollforward Pending 状态

Rollforward to end of logs and complete 实例

接着上面的实例,执行前滚操作来使数据库可以恢复正常状态。执行 db2 rollforward db $db to end of logs and complete 操作,将前滚到日志的最后,这意味着所有归档的日志和活动日志都被遍历。如清单 11 和图 9 所示。

清单 11. 前滚到活动日志末尾并完成前滚
 db2 "rollforward db test to end of logs and complete"

图 9. Rollforward Completed

图 9. Rollforward Completed

rollforward interrupted 实例

如果在执行 rollforward to end of logs 中,用户误操作或者其他原因不小心中断了前滚操作,那么再次执行 rollforward to end of logs 时,会接着上次的中断状态,继续执行以至完成。例如:db2 rollforward db $db to end of logs 在执行过程中按 Ctrl+C,使前滚操作执行中断,此时数据库仍然处于 rollforward-pending 状态。清单 12 列出了这个实例的命令。

清单 12. 前滚中断
 db2 "rollforward db test to end of logs"
 Push Ctrl+C 
 db2 "rollforward db test to end of logs and stop"
 db2 "connect to test"

图 10 显示了中断 rollfoward 命令的结果。

图 10. Rollforward Pending 状态

图 10. Rollforward Pending 状态

此时执行前滚操作 db2 rollforward db $db to end of logs and stop,rollforward 继续执行至完成,这时数据库连接成功,如图 11 所示。

图 11. Rollforward Completed

图 11. Rollforward Completed

rollforward noretrieve 实例

noretrieve 参数表明不需要取回已经归档的日志,所以 rollforward db $db to end of logs and stop noretrieve 成功与否取决与 rollforward 是否需要取回归档日志文件。如果需要,因为前滚参数指定 noretrieve,那前滚会因为缺少这些日志文件而失败。清单 13 和图 12 列出了这个实例。

清单 13. 不需要取回归档日志的前滚
 db2 "rollforward db test to end of logs and stop noretrieve"

图 12. Rollforward With noretrieve

图 12. Rollforward With noretrieve

rollforward overflow log path 实例

参数 overflow log path 会覆盖以前设置的 overflow log path,如果先前设置了 db2 update db cfg for test using overflowlogpath $path,那么使用 rollforward db $db to end of logs and complete overflow log path ($overflow) 命令,$overflow 会取代 $path 成为新的 overflow log path。清单 14 和图 13 显示了该实例。

清单 14. 覆盖 logpath 的前滚
 db2 "rollforward db test to end of logs and complete overflow log path ($overflowPath2)"

图 13. Rollforward With overflow log path

图 13. Rollforward With overflow log path

在 rollforward 执行过程中可以看到在新的目录 $overflow 中的日志文件,可见参数生效,如图 14 所示。

图 14. Overflow 日志列表

图 14. Overflow 日志列表

rollforward backup 实例

数据库还可以进行 rollforward backup 操作,如清单 15 所示。

清单 15. 前滚备份
 db2 "backup db test online to $backupPath include logs"
 db2 "restore db test from $backupPath taken at 20091101125919 without prompting"
 db2 "rollforward db test to end of backup"

图 15 显示了 online backup 的结果。

图 15. Online backup

图 15. Online backup

然后执行

 db2 restore db $db from $backupPath taken at $backupNum without prompting

 db2 rollforward db $db to end of backup

就可以进行恢复。Rollforward to the end of backup 可以前滚分区数据库中所有的分区到最近的恢复点。要人工的定位这个恢复点很难,特别是对分区数据库难上加难了,而使用 end of backup 却很容易定位。图 16 显示了最终结果。

图 16. Rollforward to end of backup

图 16. Rollforward to end of backup

回页首

结束语

本文简单的对 rollforward 的使用进行了介绍,并使用 DB2 V97 做了简单的实例说明,从而能根据需要使用相应的参数,更好的运用 rollforward。


本文转载自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1003wucx/index.html

共有 人打赏支持
Goopand
粉丝 9
博文 416
码字总数 203178
作品 0
朝阳
私信 提问
DB2数据库在线备份还原笔记

DB2数据库在线备份还原笔记 数据库在线增量备份 由于一般客户的生产系统数据量都很大,所以频繁的进行数据库或表空间的全量备份在空间存储上变得不可行。DB2 支持两种增量的备份,一种是增量...

天意1
2017/04/28
0
0
db2 v10.5 HADR快速部署手册

一、目录准备 mkdir -p /home/db2inst1/db2backup mkdir -p /home/db2inst1/db2archive mkdir -p /home/db2inst1/db2log chmod -R 775 /home/db2inst1/db2backup chmod -R 775 /home/db2inst......

18620626259
2017/12/20
0
0
DB2数据库备份,冷备份、热备份、增量备份实验

造备份目录 mkdir archivelog mkdir backup 2.造库,用那个模板库 db2star 3.造表, db2 connect to sample db2 "create table test (id int,name varchar(20),password varchar(20))" db2 "......

凉了凉了
10/12
0
0
IBM的DB2数据库常用命令及查询

IBM的DB2数据库常用命令及查询2017年04月16日 11:57:31阅读数:33431、 打开命令行窗口  #db2cmd2、 打开控制中心  #db2cmd db2cc3、 打开命令编辑器 #db2cmd db2ce=====操作数据库命令=...

rootliu
05/10
0
0
linux下DB2过期几种解决方式

试用的DB2版本一般时间为90天,试用期过后数据库变无法正常打开,提示信息为数据库已过期,为了继续试用,有几种解决方式供大家参考: 1.简单直接的方法——修改linux系统日期,让DB2获取当前...

damomzhang
2013/04/05
0
1

没有更多内容

加载失败,请刷新页面

加载更多

一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
1分钟前
0
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
15分钟前
0
0
OSChina 周四乱弹 —— 每天都迟到是种什么样的体验

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席机器人 :《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 《Too Good At Goodbyes (Acoustic) - Sam Smith - 单曲》 ...

小小编辑
20分钟前
37
6
jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部