一 数据库备份与恢复 2 数据库恢复 2.2 数据库重定向与重建
2.2.1 重定向恢复
"在下列其中一种情况下,将执行重定向复原操作: • 要将备份映像复原到不同于源机器的目标机器上 • 要将表空间容器复原到另一个物理位置中 • 由于至少一个容器不可访问,所以复原操作失败 注: 不能使用重定向复原操作将数据从一个操作系统移至另一个操作系统。 在重定向复原操作期间,如果目录和文件容器不存在,将自动创建。数据库管理器不会自动创建设备容器。 DB2 只支持添加、更改或除去 DMS 表空间的表空间容器。对于 SMS 表空间,重定向复原操作是唯一可用来修改表空间容器配置的方法。 可以通过调用 RESTORE DATABASE 命令并指定 REDIRECT 参数,或者通过使用控制中心中的“复原数据库”向导来重新定义表空间容器。
增量备份映像重定向复原操作的调用过程与非增量备份映像重定向复原操作的调用过程相似。
请发出具有 REDIRECT 选项的 RESTORE DATABASE 命令,并指定应该用于数据库增量复原操作的备份映像。
此外,可以根据备份映像生成重定向复原脚本,然后就可以在需要时修改该脚本。 容器重定向操作为管理表空间容器提供了相当大的灵活性。例如,即使不支持向 SMS 表空间添加容器,您也可以通过在调用重定向复原操作时指定其他容器来达到此目的。"
通过使用自动生成的脚本复原数据库来重新定义表空间容器
"复原数据库时,RESTORE 实用程序假定物理容器布局与备份数据库时的物理容器布局相同。
如果需要更改任何物理容器的位置或大小,那么必须发出具有 REDIRECT 选项的 RESTORE DATABASE 命令。
使用此选项时,需要指定存储在备份映像中的物理容器的位置,并且需要提供每个将要改变的非自动表空间的全部容器。可以在备份时捕获容器信息,但是这样做会很繁琐。 为了便于执行重定向复原,RESTORE 实用程序允许根据现有备份映像生成重定向复原脚本,方法是发出具有 REDIRECT 和 GENERATE SCRIPT 选项的 RESTORE DATABASE 命令。
RESTORE 实用程序将检查备份映像、从备份映像中提取容器信息并生成 CLP 脚本,该脚本包含容器的所有详细信息。
接着,可以在脚本中修改任何路径或容器大小,然后运行该 CLP 脚本以使用一组新容器来重新创建数据库。
即使只有备份映像,而不了解容器布局,也可以使用生成的脚本来复原数据库。该脚本是在客户机上创建的。
通过使用该脚本作为基础,可以确定复原后数据库的日志文件和容器所需空间的位置,并且可以相应地更改日志文件和容器路径。 生成的脚本由四节组成: 初始化 第一节设置命令选项并指定要运行命令的数据库分区。在分区数据库环境中运行脚本时,需要指定要运行脚本命令的数据库分区,这一点尤其重要。 指定了 REDIRECT 选项的 RESTORE 命令 第二节启动 RESTORE 命令并使用 REDIRECT 选项。此节可以使用所有 RESTORE 命令选项,不能与 REDIRECT 选项配合使用的命令选项除外。 表空间定义 此节包含备份映像中包含的或命令行上指定的每个表空间的表空间定义。每个表空间都有一节,每一节都包含注释块,该注释块包含有关表空间名称、类型和大小的信息。
该信息是使用表空间快照的格式提供的。可以使用提供的信息来确定所需的表空间大小。
查看使用自动存储器创建的表空间的输出时,您将看不到 SET TABLESPACE CONTAINERS 子句。 指定了 CONTINUE 选项的 RESTORE 命令 最后一节发出具有 CONTINUE 选项的 RESTORE 命令以完成重定向复原。"
使用自动生成的脚本来执行重定向复原
"过程 使用 RESTORE 实用程序来生成重定向复原脚本。可以通过命令行处理器 (CLP) 或 db2Restore 应用程序编程接口 (API) 来调用 RESTORE 实用程序。
以下是指定了 REDIRECT 选项和 GENERATE SCRIPT 选项的 RESTORE DATABASE 命令示例: db2 restore db test from /home/jseifert/backups taken at 20050304090733 redirect generate script test_node0000.clp 此命令将在客户机上创建名为 test_node0000.clp 的重定向复原脚本。 在文本编辑器中打开重定向复原脚本以进行所需的修改。可以修改: • 复原选项 • 自动存储路径 • 容器布局和路径 运行修改后的重定向复原脚本。例如: db2 -tvf test_node0000.clp"
2.2.2 重建数据库
"重建数据库是使用一组复原操作来复原数据库或它的一部分表空间的过程。数据库重建提供的功能使 DB2® 更健壮且用途更广泛,并为您提供一个更加完整的恢复解决方案。 允许从表空间备份映像重建数据库意味着您不必再进行那么多完整数据库备份。随着数据库大小的不断增长,执行完整数据库备份的机会越来越有限。
由于还可以采用表空间备份,您不必再那么频繁地进行完整数据库备份。相反,您可以更多地进行表空间备份,并计划在出现灾难时使用它们和日志文件。 在恢复情况下,如果需要使一部分表空间比其他表空间更快地处于联机状态,那么可以使用重建来完成此任务。仅使一部分表空间处于联机状态的功能在测试和生产环境中特别有用。 重建数据库涉及一系列潜在的复原操作。重建操作可以使用数据库映像和/或表空间映像。可以使用完整备份和/或增量备份。
初始复原操作复原目标映像,该映像定义可以复原的数据库的结构(例如,表空间集和数据库配置)。
对于可恢复数据库,重建允许您构建可连接的数据库并且使该数据库包含需要处于联机状态的一部分表空间,而让稍后才恢复的表空间处于脱机状态。 用来重建数据库的方法取决于数据库是可恢复的还是不可恢复的。 • 如果数据库是可恢复的,使用下列其中一种方法: o 使用完整数据库备份映像、增量数据库备份映像或表空间备份映像作为目标映像,通过仅使用 REBUILD 选项从目标映像复原 SYSCATSPACE 及任何其他表空间来重建数据库。
然后,可以将数据库前滚至某个时间点。 o 使用完整数据库备份映像、增量数据库备份映像或表空间备份映像作为目标映像,通过指定使用 REBUILD 选项复原目标映像时在数据库中定义的表空间集来重建数据库。
SYSCATSPACE 必须是此表空间集的一部分。
此操作将复原指定的并且是在目标映像中定义的那些表空间,然后使用恢复历史记录文件来自动查找并复原不在目标映像中的其余表空间所需的任何其他备份映像。
复原完成之后,立即将数据库前滚至某个时间点。 • 如果数据库是不可恢复的: o 使用完整或增量数据库备份映像作为目标映像,通过使用适当的 REBUILD 语法从目标映像复原 SYSCATSPACE 和任何其他表空间来重建数据库。
复原完成后,可以连接至该数据库。"
"指定目标映像 要对数据库执行重建,一开始请发出 RESTORE 命令并指定用作复原操作目标的最新备份映像。
此映像称为重建操作的目标映像,因为它定义要复原的数据库的结构,包括可以复原的表空间、数据库配置和日志序列。
重建目标映像是使用 RESTORE DATABASE 命令中的 TAKEN AT 参数指定的。
目标映像可以是任何类型的备份(完整备份、表空间备份、增量备份、联机备份或脱机备份)。
创建目标映像时在数据库中定义的表空间将是可用于重建数据库的表空间。 必须使用下列其中一种方法指定想要复原的表空间: • 指定想要复原数据库中定义的所有表空间并提供异常列表(如果想要排除一些表空间) • 指定想要复原目标映像中具有用户数据的所有表空间并提供异常列表(如果想要排除一些表空间) • 指定想要复原的在数据库中定义的表空间列表 一旦知道了想要重建数据库包含的表空间,就发出带有适当 REBUILD 选项的 RESTORE 命令并指定要使用的目标映像。 重建阶段 在发出带有适当 REBUILD 选项的 RESTORE 命令并成功地复原了目标映像之后,就认为数据库处于重建阶段。
在复原目标映像之后,进行的任何其他表空间复原将会使数据复原到现有表空间中,如已重建的数据库中定义的那样。
然后,这些表空间将在重建操作完成时与数据库一起前滚。 如果发出带有适当 REBUILD 选项的 RESTORE 命令,但数据库不存在,那么将根据目标映像中的属性创建一个新数据库。
如果数据库存在,您将接收到一条警告消息,通知您重建阶段即将开始。将会询问您是否想要继续重建操作。 重建操作从目标映像复原所有初始元数据。这包括属于数据库但不属于表空间数据或日志文件的所有数据。初始元数据的示例有: • 表空间定义 • 历史记录文件,它是记录管理操作的数据库文件 重建操作还复原数据库配置。目标映像设置日志链,它确定在重建阶段可以用于其余复原的映像。只能使用同一日志链上的映像。 如果磁盘上已经存在数据库并且想要从目标映像生成历史记录文件,那么应该指定 REPLACE HISTORY FILE 选项。
自动逻辑使用此时磁盘上的历史记录文件来查找重建数据库所需的其余映像。 复原了目标映像之后: • 如果数据库是可恢复的,那么数据库将处于前滚暂挂状态,并且复原的所有表空间也处于前滚暂挂状态。数据库中定义的但未复原的所有表空间都处于复原暂挂状态。 • 如果数据库是不可恢复的,那么复原的数据库和数据库表空间将进入正常状态。未复原的所有表空间将处于删除暂挂状态,因为不能再复原它们。
对于这种类型的数据库来说,重建阶段完成了。 对于可恢复的数据库,当发出第一个 ROLLFORWARD DATABASE 命令并且 ROLLFORWARD 实用程序开始处理日志记录时,重建阶段结束。
如果前滚操作在开始处理日志记录后失败,并且接着发出了复原操作,那么不认为该复原是重建阶段的一部分。应该将这种复原看作是正常表空间复原,它们不是重建阶段的一部分。 自动处理 在复原目标映像之后,RESTORE 实用程序确定是否有其余表空间需要复原。
如果有,那么使用对带有 REBUILD 选项的 RESTORE DATABASE 命令使用的那个连接进行复原。
该实用程序使用磁盘上的历史记录文件来查找在目标映像之前的最新备份映像,该备份映像包含需要复原的其余每个表空间。
RESTORE 实用程序使用历史记录文件中存储的备份映像位置数据来自动复原每个映像。后续这些复原表空间级复原,只能以脱机方式执行。
如果选择映像不属于当前日志链,那么会返回错误。从该映像复原的每个表空间将处于前滚暂挂状态。 复原实用程序尝试自动复原所有必需表空间。在某些情况下,可能由于历史记录文件具有的问题而无法复原一些表空间,或者在复原其中一个必需映像时发生错误。
在此情况下,可以手动完成重建,或者更正问题然后重新发出重建。 如果自动重建无法成功完成,那么 RESTORE 实用程序会将它收集的用于其余复原步骤的所有信息都写入诊断日志(db2diag 日志文件)中。
可以使用这些信息手动完成重建。 如果正在重建某个数据库,那么仅获取属于重建过程的表空间的容器。 如果需要通过重定向复原来重新定义任何容器,那么将需要为其余复原和后续前滚操作设置新容器的新路径和大小。 如果从其余这些映像中的一个映像复原的表空间的数据不符合新容器的定义,那么该表空间将处于复原暂挂状态,并且在复原结束时会返回一则警告消息。
可以在诊断日志中找到更多有关该问题的信息。 完成重建阶段 在已经复原了所有要复原的表空间后,您可以根据数据库的配置作出两种选择。如果数据库是不可恢复的,那么数据库将是可连接的,并且复原的所有表空间将处于联机状态。
不能再复原处于删除暂挂状态的任何表空间,如果将来要在数据库上执行备份,那么应该删除这些表空间。 如果数据库是可恢复的,那么可以发出前滚命令来使已复原的表空间处于联机状态。
如果 SYSCATSPACE 尚未复原,那么前滚将失败,并且必须在前滚操作开始之前复原此表空间。这表示必须在重建阶段复原 SYSCATSPACE。 注: 在分区数据库环境中,SYSCATSPACE 不存在于非目录分区中,因此不能在那里将它重建。
但是,在目录分区上,SYSCATSPACE 必须是重建的表空间,否则前滚操作将不会成功。 前滚数据库使数据库脱离前滚暂挂状态,并使处于前滚暂挂状态的任何表空间向前滚动。不会对任何处于复原暂挂状态的表空间运行 ROLLFORWARD 实用程序。 前滚操作的停止时间必须比在重建阶段复原最新备份映像的结束时间要晚。如果给出任何其他时间,那么会发生错误。
如果前滚操作无法到达复原的最早映像的备份时间,那么 ROLLFORWARD 实用程序将无法使数据库到达一个一致的时间,前滚将失败。 最早备份映像和最新备份映像的时间范围内,必须使所有日志文件可供 ROLLFORWARD 实用程序使用。
所需的日志是从最早备份映像到目标备份映像都遵循日志链的那些日志,如目标映像中的截断数组所定义的那样,否则前滚操作将失败。
如果在重建阶段复原了比目标映像更新的任何备份映像,那么需要从目标映像到复原的最新备份映像的附加日志。
如果日志不可用,那么前滚操作将使日志无法访问的那些表空间处于复原暂挂状态。可以发出 LIST HISTORY 命令来显示复原重建条目以及前滚所需的日志范围。 正确的日志文件必须可用。如果依靠 ROLLFORWARD 实用程序来检索日志,那么必须确保配置了“DB2 日志管理器”以指示检索日志文件的位置。
如果日志路径或归档路径更改了,那么需要使用 ROLLFORWARD DATABASE 命令的 OVERFLOW LOG PATH 选项。 当成功完成前滚命令时,使用 ROLLFORWARD DATABASE 命令的 AND STOP 选项来使数据库可用。此时,数据库不再处于前滚暂挂状态。
如果前滚操作开始了,但它未成功完成就出现错误,那么前滚操作将在故障点处停止并返回错误。数据库仍然处于前滚暂挂状态。
必须执行步骤以更正该问题(例如,修正日志文件),然后发出另一个前滚操作来继续处理。 如果无法修正该错误,那么可以通过发出 ROLLFORWARD STOP 命令使数据库前进到故障点。
一旦使用了 STOP 选项,日志中超出该故障点的所有日志数据将不再可用。数据库处于该故障点处,并且已恢复的所有表空间都处于联机状态。
尚未恢复的表空间处于复原暂挂状态。数据库处于正常状态。 您必须决定恢复处于复原暂挂状态的其余表空间的最佳方法。该方法可以是进行新的复原并前滚表空间,也可以是重新发出整个重建操作。
这将取决于遇到的问题的类型。如果 SYSCATSPACE 是其中一个处于复原暂挂状态的表空间,那么数据库将不可连接。"