文档章节

DB2 rollforward 命令使用详解

Goopand
 Goopand
发布于 2015/04/20 15:18
字数 3133
阅读 43
收藏 0
点赞 0
评论 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
粉丝 8
博文 376
码字总数 186118
作品 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
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
CentOS下DB2数据库安装过程详解

这篇文章主要介绍了CentOS下DB2数据库安装过程详解,本文步骤详细,操作的命令也比较全 安装前请查看DB2版本和许可证说明来增加了解,先弄明白改安装什么版本,这里我用的是最新的Express-C版本...

898009427
2017/10/12
0
0
MySQL数据库使用mysqldump导出数据详解

mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。接下来通过本文给大家介绍MySQL数据库使用mysqldump...

Airship
2016/11/22
5
0
关于DB2的Q复制产品问题的正解!

以下问题我在线问过IBM的虚拟创新中心,得到的解答含糊不清且最后被我确认是错误的回答,武汉本地的售前工程师也不了详解,我身体力行,回答如下: 1、DB2 8.2版本中,DB2的Q复制组件及软件模...

晨曦之光
2012/03/09
0
0
Oracle、MySQL、云计算、大数据,最热话题好文都在这了!

在过去的九个月里, DBAplus社群始终聚焦各种数据库、云计算、大数据及中间件等热门话题,坚持每天为大家献上最新鲜、最内涵的技术好文!下面小编就把这些优质文章分门别类,给大家做个梳理,...

DBAplus社群
2016/06/29
0
0
IBM官方db2信息中心最新消息:不推荐使用控制中心工具和 DB2 管理服务器(DAS)

不推荐使用控制中心工具和 DB2 管理服务器(DAS) 从版本 9.7 开始,不推荐使用控制中心工具和 DAS,在将来发行版中可能会将其除去。现在提供了新的 GUI 工具套件以管理 DB2® Linux® 版、U...

晨曦之光
2012/03/09
0
0
RedHat Enterprise Linux 5.4上图形或者手动安装DB2 V9.7

Linux(RedHat Enterprise Linux 5.4)下的DB2安装使用图形界面 可以使用图形界面,也可以使用手工安装的方式。我们先介绍最简单的安装方法。 1.从IBM网站下载DB2 9.7 express C版本:文件名d...

鉴客
2010/07/05
2.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

pigX:码云地址:最新的Spring Cloud 技术栈,Spring Cloud Finchley、oAuth2的最佳实践 在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管...

冷冷gg
3分钟前
0
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
6分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
19分钟前
4
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
39分钟前
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部