前滚会话 - CLP 示例
ROLLFORWARD DATABASE 命令允许每次指定多个操作,各个操作由关键字 AND 隔开。例如,要前滚至日志末尾,然后完成,可将下列独立的命令:
db2 rollforward db sample to end of logs
db2 rollforward db sample complete
组合为:
db2 rollforward db sample to end of logs and complete
虽然这两种方法是等效的,但建议您分两个步骤来完成此类操作。在停止前滚操作前验证它是否具有预期的进度,以免丢失任何日志,这一点很重要。
如果前滚命令遇到错误,前滚操作就无法完成。在此情况下,将返回该错误,这样,您就能够修正该错误并重新发出以上命令。但是,如果无法修正该错误,那么可以通过发出以下命令强制前滚完成:
db2 rollforward db sample complete
此命令使数据库联机并复原到发生故障前日志点。
示例 2
将数据库前滚至日志末尾(已复原了两个表空间):
db2 rollforward db sample to end of logs
db2 rollforward db sample to end of logs and stop
这两个语句是等效的。不需要 AND STOP 或 AND COMPLETE 表空间就可以前滚恢复至日志末尾。不需要表空间名称。如果未指定,将包括所有需要前滚恢复的表空间。如果将只前滚这些表空间的一个子集,那么必须指定它们的名称。
示例 3
复原了 3 个表空间后,将其中一个前滚至日志末尾,另两个前滚到某时间点,所有操作都要联机执行:
db2 rollforward db sample to end of logs tablespace(TBS1) online
db2 rollforward db sample to 1998-04-03-14.21.56 and stop
tablespace(TBS2, TBS3) online
应注意,两个前滚操作不能并发运行。只有在成功地完成了第一个前滚操作后,才能调用第二个命令。
示例 4
复原数据库后,前滚到某时间点,使用 OVERFLOW LOG PATH 来指定用户出口用来保存已归档日志的目录:
db2 rollforward db sample to 1998-04-03-14.21.56 and stop
overflow log path (/logs)
示例 5
在以下示例中,有一个称为 sample 的数据库。备份该数据库,在备份映像中包含恢复日志;复原该数据库;然后,将该数据库前滚到备份时间戳记末尾。
备份该数据库,在备份映像中包含恢复日志:
db2 backup db sample online include logs
使用备份映像复原该数据库:
db2 restore db sample
将该数据库前滚到备份时间戳记末尾:
db2 rollforward db sample to end of backup
示例 6(分区数据库环境)
有三个数据库分区:0、1 和 2。在所有数据库分区上定义表空间 TBS1,在数据库分区 0 和 2 上定义表空间 TBS2。在数据库分区 1 上复原了数据库,并在数据库分区 0 和 2 上复原了 TBS1 之后,在数据库分区 1 上前滚数据库:
db2 rollforward db sample to end of logs and stop
这会返回警告 SQL1271(已恢复数据库,但数据库分区 0 和 2 上的一个或多个表空间处于脱机状态)。
db2 rollforward db sample to end of logs
此命令在数据库分区 0 和 2 上前滚 TBS1。在此情况下,子句 TABLESPACE(TBS1) 是可选的。
示例 7(分区数据库环境)
在以下示例中,有一个称为 sample 的分区数据库。使用单系统视图备份备份所有数据库分区;在所有数据库分区上复原该数据库;将该数据库前滚到备份时间戳记末尾。
执行单系统视图 (SSV) 备份:
db2 backup db sample on all nodes online include logs
在所有数据库分区上复原该数据库:
db2_all "db2 restore db sample taken at 1998-04-03-14.21.56"
将该数据库前滚到备份时间戳记末尾:
db2 rollforward db sample to end of backup on all nodes
示例 8(分区数据库环境)
在以下示例中,有一个称为 sample 的分区数据库。使用 db2_all,通过一个命令备份所有数据库分区;在所有数据库分区上复原该数据库;并将该数据库前滚到备份时间戳记末尾。
使用 db2_all,通过一个命令备份所有数据库分区:
db2_all "db2 backup db sample include logs to /shared/dir/"
在所有数据库分区上复原该数据库:
db2_all "db2 restore db sample from /shared/dir/"
将该数据库前滚到备份时间戳记末尾:
db2 rollforward db sample to end of backup on all nodes
示例 9(分区数据库环境)
只在数据库分区 0 和 2 上复原表空间 TBS1 之后,在数据库分区 0 和 2 上前滚 TBS1:
db2 rollforward db sample to end of logs
忽略数据库分区 1。
db2 rollforward db sample to end of logs tablespace(TBS1)
此命令失败,因为 TBS1 未对在数据库分区 1 上进行前滚恢复作好准备。报告 SQL4906N。
db2 rollforward db sample to end of logs on
dbpartitionnums (0, 2) tablespace(TBS1)
成功完成。
db2 rollforward db sample to 1998-04-03-14.21.56 and stop
tablespace(TBS1)
此命令失败,因为 TBS1 未对在数据库分区 1 上进行前滚恢复做好准备;必须将所有段一起前滚。
注: 在将表空间前滚到某时间点之后,将不接受 dbpartitionnum 子句。前滚操作必须在表空间所在的所有数据库分区上进行。
在数据库分区 1 上复原 TBS1 后:
db2 rollforward db sample to 1998-04-03-14.21.56 and stop
tablespace(TBS1)
成功完成。
示例 10(分区数据库环境)
在所有数据库分区上复原表空间后前滚至 PIT2,但不指定 AND STOP。前滚操作仍在进行中。取消并前滚至 PIT1:
db2 rollforward db sample to pit2 tablespace(TBS1)
db2 rollforward db sample cancel tablespace(TBS1)
** restore TBS1 on all dbpartitionnums **
db2 rollforward db sample to pit1 tablespace(TBS1)
db2 rollforward db sample stop tablespace(TBS1)
示例 11(分区数据库环境)
前滚恢复 db2nodes.cfg 文件中列示的 8 个数据库分区(3 至 10)上的表空间:
db2 rollforward database dwtest to end of logs tablespace (tssprodt)
前滚恢复至日志末尾(而不是时间点)的操作成功完成。不必指定表空间所在的数据库分区。实用程序缺省到 db2nodes.cfg 文件。
示例 12(分区数据库环境)
前滚恢复单一数据库分区数据库分区组(在数据库分区 6 上)上的 6 个小表空间:
db2 rollforward database dwtest to end of logs on dbpartitionnum (6)
tablespace(tsstore, tssbuyer, tsstime, tsswhse, tsslscat, tssvendor)
前滚恢复至日志末尾(而不是时间点)的操作成功完成。
示例 13(分区表 - 在所有数据分区上前滚至日志末尾)
使用表空间 tbsp1、tbsp2 和 tbsp3 创建了分区表,索引在 tbsp0 中。后来,用户对 tbsp4 中的表添加了数据分区,并从 tbsp5 中的表连接了数据分区。可以将所有表空间前滚至日志末尾。
db2 rollforward db PBARDB to END OF LOGS and stop
tablespace(tbsp0, tbsp1, tbsp2, tbsp3, tbsp4, tbsp5)
成功完成。
示例 14(分区表 - 在一个表空间上前滚至日志末尾)
最初使用表空间 tbsp1、tbsp2 和 tbsp3 创建了分区表,索引在 tbsp0 中。后来,用户对 tbsp4 中的表添加了数据分区,并从 tbsp5 中的表连接了数据分区。表空间 tbsp4 损坏并要求复原和前滚至日志末尾。
db2 rollforward db PBARDB to END OF LOGS and stop tablespace(tbsp4)
成功完成。
示例 15(分区表 - 在所有数据分区上前滚到时间点,这些数据分区包括那些已添加、已连接、已拆离或带索引的数据分区)
使用表空间 tbsp1、tbsp2 和 tbsp3 创建了分区表,索引在 tbsp0 中。后来,用户对 tbsp4 中的表添加了数据分区,从 tbsp5 中的表连接了数据分区,并从 tbsp1 拆离了数据分区。用户对分区表使用的所有表空间(包括 INDEX IN 子句中指定的那些表空间)执行前滚到 PIT 操作。
db2 rollforward db PBARDB to 2005-08-05-05.58.53 and stop
tablespace(tbsp0, tbsp1, tbsp2, tbsp3, tbsp4, tbsp5)
成功完成。
示例 16(分区表 - 在一小部分表空间上前滚到 PIT)
使用三个表空间(tbsp1、tbsp2 和 tbsp3)创建了分区表。后来,用户从 tbsp3 中拆离了所有数据分区。只允许在 tbsp1 和 tbsp2 上前滚到 PIT。
db2 rollforward db PBARDB to 2005-08-05-06.02.42 and stop
tablespace( tbsp1, tbsp2)