DB2的数据库前滚恢复操作
【IT168 技术文档】介绍与DB2的数据库前滚恢复操作相关的两个时间点:前滚的最小恢复时间,和前滚操作结束要求的最小恢复时间,以及如何在前滚命令中使用 UTC 或本地时间,如何获取 UTC 等,以帮助用户了解DB2前滚操作中时间戳指定上应该注意的一些事项。
对于DB2数据库,若启用了 LOGRETAIN 或 USEREXIT 使数据库使用归档日志模式,则数据库的恢复操作将会涉及到前滚恢复的操作,也就是说,需要在前滚时指定数据库要恢复到的时间点的时间戳记,以便DB2前滚该时间戳之前归档日志中的所有事务,满足用户对数据库恢复操作的要求。为帮助用户在使用前滚命令(ROLLFORWARD)时指定准确的时间戳参数,这里介绍几个值得注意的事项。(为简化过程的说明,这里仅以前滚数据库的命令进行举例说明,而没有例举前滚表空间的命令)。
一. 前滚的最小恢复时间:
该时间为系统目录表对表空间或其中表的最后一次更新操作的时间戳记,也就是任何 ROLLFORWARD 命令要成功执行(不一定是前滚结束或完成)必须恢复到的(最早落实的事务的)时间戳。这一时间戳记可通过 LIST TABLESPACES SHOW DETAIL 取得,例如要获取 SAMPLE 数据库的 USERSPACE1 表空间的前滚最小恢复时间,可执行:
db2 list tablespaces show detail
:
表空间标识 = 2
名称 = USERSPACE1
:
最小恢复时间 = 2005-10-27 16:07:39.000000
也就是说该数据库的前滚恢复操作所要恢复的最小恢复时间点为 2005-10-27-16.07.39.000000。
另外,还可通过对表空间进行快照,从输出结果中同样可以得到该信息:
db2 get snapshot for tablespaces on sample
表空间名 = USERSPACE1
:
最小恢复时间 = 2005-10-27 16:07:39.000000
此外,SNAPSHOT_TBS_CFG 表函数所返回的表的 MIN_RECOVERY_TIME 字段中的值也为该最小恢复时间。DB2 所提供的 SNAPSHOT_TBS_CFG 表函数可通过对表空间的快照获取表空间的配置信息,例如:
db2 "select substr(tablespace_name,1,15) as tablespace_name, min_recovery_time from table (snapshot_tbs_cfg('SAMPLE',-1) ) as a"
TABLESPACE_NAME MIN_RECOVERY_TIME
--------------- --------------------------
:
USERSPACE1 2005-10-28-00.07.39.000000
:
此时我们会发现,虽然同样是“最小恢复时间”,但两种方法取得的时间戳记却不相同,之间相差了8个小时,这里暂且放下这个疑问,我们将在下面对这个问题加以说明。
对于该最小恢复时间为 2005-10-27-16.07.39.000000 的 SAMPLE 的数据库,前面已提到,任何 ROLLFORWARD 命令要成功完成都至少前滚过到或前滚过这个时间点,因此无论用户发出前滚到任何早于该时间点的 ROLLFORWARD 命令,返回的“上次落实的事务”中的时间戳都会是该时间戳。如前滚到 2000 年某时间点的提示信息如下:
db2 "rollforward db sample to 2000-10-28-00.09.00.000000"
前滚状态
输入数据库别名 = sample
节点数已返回状态 = 1
节点号 = 0
前滚状态 = DB 工作
下一个要读取的日志文件 = S0000003.LOG
已处理的日志文件 = S0000000.LOG - S0000001.LOG
上次落实的事务 = 2005-10-27-16.07.39.000000
从输出结果中再次验证了,任何早已该时间点的前滚命令都将恢复到该时间点。