DB2 rollforward 命令使用详解
DB2 rollforward 命令使用详解
原文:https://www.ibm.com/developerworks/cn/data/library/techarticles/dm-1003wucx/
引言
在数据库成为存储企业数据的载体时,如何恢复数据成为大家比较关心的话题。在 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 显示了备份结果。
备份之后可以在指定的目录中看到相应的备份影像。
清单 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. 插入数据后恢复表空间
恢复成功之后,三个表空间都处于 rollforward pending 状态,用户无法访问,状态如图 3 所示。
图 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 成功。
rollforward query status 实例
rollforward 命令的 query status 选项可用于列出如下一些当前数据库的信息。
DB2 已经前滚的日志文件。
需要的下一个归档日志文件。
自前滚处理开始以来最近提交的事务的时间戳。
下面使用清单 9 来查询数据库状态。
清单 9. 前滚数据库并查询状态
db2 "rollforward db test query status"
图 5 中显示 DB pending 状态的数据库,实际上是处于 rollforward pending 状态。需要前滚数据库,使数据库回到正常状态。
图 5. Check Rollforward Pending Status
rollforward cancel 实例
在进行 cancel 操作前,先执行最基本的操作,db2 rollforward db $db to end of logs,操作完成后所有在数据库备份后写的日志文件都会前滚,如图 6 所示。
图 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 状态
重新执行 restore 操作,db2 restore db $db from $backdir without prompting,
此时数据库处于 rollforward-pending 状态,此时任何连接都被拒绝,如图 8 所示
图 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
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 状态
此时执行前滚操作 db2 rollforward db $db to end of logs and stop,
rollforward 继续执行至完成,这时数据库连接成功,如图11 所示。
图 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
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
在 rollforward 执行过程中可以看到在新的目录 $overflow 中的日志文件,可见参数生效,如图 14 所示。
图 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 的结果。
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
结束语
本文简单的对 rollforward 的使用进行了介绍,并使用 DB2 V97 做了简单的实例说明,从而能根据需要使用相应的参数,更好的运用 rollforward
DB2 rollforward 命令使用详解的更多相关文章
- Linux 执行文件查找命令 which 详解
某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查 ...
- systemctl命令用法详解
systemctl命令用法详解系统环境:Fedora 16binpath:/bin/systemctlpackage:systemd-units systemctl enable httpd.serv ...
- 批处理中的echo命令图文详解
批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...
- Ubuntu kill命令用法详解
转自:Ubuntu kill命令用法详解 1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID root@fcola:/# ps -ef | grep sen ...
- install 命令用法详解
install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似 ...
- dd命令使用详解
dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...
- Mysql导入导出工具Mysqldump和Source命令用法详解
Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...
- Mysql数据库导入命令Source详解
Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...
- dos下的edit命令使用详解
dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...
随机推荐
- EF迁移命令
EF迁移设置的最后一步是在包管理器控制台中输入命令“add-migration InitialMigration -IgnoreChanges”.“InitialMigration”(高亮的黄色)是您 ...
- redis 频率限制
方式1: $redis = new Redis(); //以自然时间控制 一自然分钟内超过100次进行限制, 屏蔽多久的时间必须为计数key时间的倍数 $key = 'xxxx'.date('Y-m- ...
- ffmpag总结_android_to_ios视频转换
项目需求: 需要android和ios拍的视频在两个平台上都能播放. ffmpag很早以前就安装好了,忘了是如何装了. 一直无法将android同事的视频转成mp4在ios上播放. 后来发现ffmpa ...
- 【Linux】ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- SED单行脚本快速参考(Unix 流编辑器)(转)
sed.sourceforge.net被封杀,特在此处贴上官方的sed 使用说明文档 SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE S ...
- Android Studio updating indices 一直刷新和闪烁
Android Studio 更新到了 3.1.3 版本,在导入了工程以后,一直出现了 updating indices 刷新的情况,造成闪烁,在切换到其他视图以后,Android Studio 会一 ...
- MYSQL 线程池
https://www.jianshu.com/p/88e606eca2a5 https://www.percona.com/doc/percona-server/LATEST/performance ...
- jsonp的工作原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 微信小程序测试指南
[本文出自天外归云的博客园] 微信小程序本地部署测试方法 下载微信开发者工具 让小程序管理员将测试人员的微信号添加开发者权限 本地设置hosts为测试环境hosts 打开微信web开发者工具并扫码登录 ...
- Node入门教程(13)第十一章:mocha单元测试+should断言库+istanbul覆盖率测试+art-template
声明:以下为老马的全栈视频教程的笔记,如果需要了解详情,请直接配合视频学习.视频全部免费,视频地址:https://ke.qq.com/course/294595?tuin=1eb4a0a4 node ...