DB2 V9.7 for Linux, UNIX, and Windows

恢复已删除的表

您可能会偶然删除包含仍需要的数据的表。如果是这样,您应该考虑在删除表操作后使关键的表成为可复原的。可通过调用数据库复原操作恢复表数据,后跟一个前滚到删除表前的某时间点的数据库前滚操作。如果数据库很大,就可能会花很多时间,并使数据在恢复期间不可用。已删除的表的恢复功能使您可使用表空间级的复原和前滚操作来恢复已删除的表数据。这样可比数据库级别的恢复要快,且您的数据库将对用户保持可用。

关于此任务

对可从已删除的表中复原的数据类型有一些限制。不可能复原:

如果在删除表时它处于重组暂挂状态,那么历史记录文件中的 CREATE TABLE DDL 与导入文件的 CREATE TABLE DDL 不完全匹配。在执行重组建议的第一个 ALTER 操作之前,导入文件将采用该表的格式,但历史记录文件中的 CREATE TABLE 语句将与包含任何 ALTER TABLE 语句结果的表的状态相匹配。

用于 LOADIMPORT 的文件类型修饰符
要通过装入或导入来恢复表,请指定下列文件类型修饰符:
  • 当要恢复数据的数据类型为 GRAPHIC 或 VARGRAPHIC 时,在 IMPORTLOAD 命令中应使用文件类型修饰符 usegraphiccodepage。 原因是它可能包含多个代码页。
  • IMPORTLOAD 命令中,应使用 delprioritychar 文件类型修饰符。 该修饰符允许 LOADIMPORT 命令解析在字符或图形列数据中包含换行符的行。

一次只能复原一个已删除的表。可执行下列操作来复原已删除的表:

开始之前

要使已删除的表可以复原,必须对该表所在的表空间启用 DROPPED TABLE RECOVERY 选项。这可以在表空间创建期间或通过调用 ALTER TABLESPACE 语句来完成。DROPPED TABLE RECOVERY 选项是表空间特定的,并限于对常规表空间使用。要确定是否对表空间启用了已删除的表的恢复功能,可以查询 SYSCAT.TABLESPACES 目录表中的 DROP_RECOVERY 列。

创建表空间时,缺省情况下已删除的表的恢复选项已打开。如果不要启用表空间的已删除的表的恢复功能,那么可以在发出 CREATE TABLESPACE 语句时显式将 DROPPED TABLE RECOVERY 选项设置为 OFF,或者可以使用 ALTER TABLESPACE 语句来对现有表空间禁用已删除的表的恢复功能。如果有许多删除表操作要恢复或者如果历史记录文件很大,那么正向恢复时已删除的表的恢复功能可能会影响性能。

对表(对该表的表空间启用了已删除的表的恢复功能)运行 DROP TABLE 语句时,将在日志文件中建立另一条目(标识已删除的表)。还会在恢复历史记录文件中建立一个条目,包含可用于重新创建表的信息。

对于分区表来说,即使对一个或多个表空间中的非分区表关闭已删除的表的恢复功能,已删除的表的恢复功能也始终处于打开状态。对于分区表来说,只写一个已删除的表日志记录。此日志记录对于恢复该表的所有数据分区来说已足够了。

过程

  1. 通过调用 LIST HISTORY DROPPED TABLE 命令来识别已删除的表。已删除的表标识列示在“备份标识”列中。
  2. 复原在删除该表前所建立的数据库级别或表空间级别备份映像。
  3. 创建包含表数据的文件将写至的导出目录。此目录必须可供所有数据库分区访问,或者在每个数据库分区上都存在。此导出目录下的子目录是由每个数据库分区自动创建的。这些子目录的名称是 NODEnnnn,其中 nnnn 代表数据库分区或节点号。包含已废弃的表数据的数据文件(就如它存在于每个数据库分区上那样)将导出到称为 data 的较低子目录中。例如,
    \export_directory\NODE0000\data。
  4. 在删除表之后前滚至某时间点,对 ROLLFORWARD DATABASE 命令使用 RECOVER DROPPED TABLE 选项。也可前滚至日志末尾,以使对表空间或数据库中的其他表进行的更新不会丢失。
  5. 使用 CREATE TABLE 语句从恢复历史记录文件重新创建表。
  6. 将在前滚操作期间导出的表数据导入表中。如果进行废弃时表处于重组暂挂状态,那么需要更改 CREATE TABLE DDL 的内容以与数据文件的内容相匹配。