使用 HADR 延迟重放来恢复数据
使用 HADR 延迟重放来恢复数据
https://www.ibm.com/docs/zh/db2/10.1.0?topic=replay-recovering-data-by-using-hadr-delayed
通过使用 HADR 延迟重放功能,您可以恢复由于主数据库上的错误事务而丢失的数据,其方法是在重放该事务之前对备用数据库停止 HADR。
开始之前
必须已经对备用数据库启用延迟重放。
如果备用数据库上的日志重放(由 STANDBY_REPLAY_LOG_TIME 指示)已经经过了备用数据库上的错误事务的落实时间,那么您将无法使用以下过程来恢复数据。您可以使用附带 -hadr 参数的 db2pd 命令或者使用 MON_GET_HADR 表函数来确定 STANDBY_REPLAY_LOG_TIME。
限制: 无法接管对其设置 hadr_replay_delay 配置参数的备用数据库并将其作为主数据库;您必须先对该备用数据库禁用延迟重放。
过程
要从错误事务进行恢复,请对为其启用了延迟重放的备用数据库执行下列步骤:
验证计时:
请确保备用数据库尚未重放此事务。STANDBY_REPLAY_LOG_TIME 值不得已到达错误事务落实时间。
请确保备用数据库已接收到相关日志。STANDBY_LOG_TIME 值(它指示接收到的日志)必须已到达错误事务落实时间之前的某个 PIT,但是接近错误事务落实时间。这将是步骤 3 中所使用的前滚 PIT。如果备用数据库尚未接收到足够的日志文件,那么您可以一直等到提供了更多日志为止,但是存在延迟时间到达错误事务时间的风险。例如,如果延迟时间为 1 小时,那么应当在错误事务时间之后不超过 50 分钟就停止 HADR(允许保留 10 分钟的安全余量),即使日志装入尚未到达您需要的 PIT 也是如此。
或者,如果共享日志归档可用,并且已将日志归档,那么不需要等待。如果日志尚未归档,那么可以使用 ARCHIVE LOG 命令将日志归档。否则,用户可以将完整的日志文件从主数据库手动复制到延迟的备用数据库(首选溢出日志路径,否则使用日志路径)。对于这些备用方法,请首先取消激活备用数据库,以避免妨碍备用数据库日志装入和重放。
可以通过发出 db2pd -db dbname -hadr,或者通过对备用数据库启用“在备用数据库上读取”功能,然后发出以下查询(它使用 MON_GET_HADR 表函数)来确定这些时间:
DB2 "select HADR_ROLE, STANDBY_ID, STANDBY_LOG_TIME, STANDBY_REPLAY_LOG_TIME,
varchar(PRIMARY_MEMBER_HOST,20) as PRIMARY_MEMBER_HOST,
varchar(STANDBY_MEMBER_HOST,20) as STANDBY_MEMBER_HOST
from table (mon_get_hadr(NULL))"
对备用数据库停止 HADR:
DB2 STOP HADR ON DATABASE dbname
将备用数据库前滚到您需要的 PIT,然后将其停止:
DB2 ROLLFORWARD DB dbname to time-stamp and STOP
请使用下列其中一种方法:
复原主数据库上丢失的数据:
从备用数据库中复制受影响的数据,然后将其发送回主数据库。
如果错误事务已废弃某个表,那么您可以将此表从备用数据库中导出,然后将其导入到主数据库中。如果错误事务已删除某个表中的行,那么您可以从备用数据库中导出此表,然后对主数据库使用导入替换操作。
因为延迟重放的备用数据库的日志流已与主数据库的日志流分开,所以要重新初始化此备用数据库。因为任何其他备用数据库继续遵循主数据库,并且也会将对主数据库执行的任何数据修复复制到这些备用数据库中,所以不需要对这些备用数据库执行任何操作。
使用对主数据库生成的备份映像来复原数据库。随时都可以生成此映像。
除去备用数据库日志路径中的所有日志文件。此步骤很重要。步骤 3 中的 ROLLFORWARD... STOP 命令会使数据库日志流与主数据库分开。如果单独保留文件,那么新复原的数据库将遵循该日志流,并且也会与主数据库分开。此外,您可以在复原之前删除数据库以进行干净启动,但是您也将失去当前配置(其中包括 HADR 配置)。
对此数据库发出附带 AS STANDBY 选项的 START HADR 命令。此数据库应当会激活,并且连接至主数据库。
使具有完整数据的备用数据库成为主数据库:
关闭旧的主数据库以避免发生分裂情况
对于延迟重放的数据库,将 hadr_replay_delay 配置参数设置为 0。如果需要,请重新配置诸如 hadr_target_list 等其他参数。然后,对此数据库运行附带 AS PRIMARY BY FORCE 选项的 START HADR 命令,以将其转换为新的主数据库。因为并不保证已配置的主要备用数据库(有可能是旧的主数据库)将能够进行连接,所以使用 BY FORCE 选项。
将客户机重定向至新的主数据库。
会将其他备用数据库自动重定向至新的主数据库。但是,如果在旧的主数据库与新的主数据库分开的时间(也就是步骤 3 中使用的 PIT)之后,备用数据库从旧的主数据库接收到日志,那么此备用数据库将被新的主数据库拒绝。如果发生这种情况,那么按照重新初始化旧的主数据库的同一过程重新初始化此备用数据库。
因为旧的主数据库的日志流已与新的主数据库的日志流分开,所以要重新初始化此旧的主数据库。
使用对新的主数据库生成的备份映像或者在步骤 3 中所使用的 PIT 之前对旧的主数据库生成的备份映像来复原数据库。
除去日志路径中的所有日志文件。如果您不执行此操作,那么新复原的数据库将遵循旧的主数据库的日志流,并与新的主数据库分开。此外,您可以在复原之前删除数据库以进行干净启动,但是您也会失去当前配置(其中包括 HADR 配置)。
对此数据库发出附带 AS STANDBY 选项的 START HADR 命令。此数据库应当会激活,并且连接至主数据库。