DB2 V9.7 for Linux, UNIX, and Windows

重建会话 - CLP 示例

情况 1

在下列示例中,有一个称为 MYDB 的可恢复数据库,该数据库中存在下列表空间:
  • SYSCATSPACE(系统目录)
  • USERSP1(用户数据表空间)
  • USERSP2(用户数据表空间)
  • USERSP3(用户数据表空间)
进行了下列备份:
  • BK1 是 SYSCATSPACE 和 USERSP1 的备份
  • BK2 是 USERSP2 和 USERSP3 的备份
  • BK3 是 USERSP3 的备份

示例 1

下列命令将整个数据库重建至最新时间点:
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK3 without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的并且所有表空间都处于 NORMAL 状态。

示例 2

下列命令仅将 SYSCATSPACE 和 USERSP2 重建至某个时间点(BK3 的末尾比该时间点要早,而该时间点又比日志末尾要迟):
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令并指定想要包括的表空间。
          db2 restore db mydb rebuild with tablespace (SYSCATSPACE, USERSP2) 
                taken at BK2 without prompting
  2. 发出带有 TO PIT 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to PIT              
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的,但只有 SYSCATSPACE 和 USERSP2 处于 NORMAL 状态。USERSP1 和 USERSP3 处于 RESTORE_PENDING 状态。

要在以后使用正常表空间复原(不带 REBUILD 选项)复原 USERSP1 和 USERSP3:
  1. 发出不带 REBUILD 选项的 RESTORE DATABASE 命令并指定想要复原的表空间。首先复原 USERSP1:
          db2 restore db mydb tablespace (USERSP1) taken at BK1 without prompting
  2. 然后复原 USERSP3:
          db2 restore db mydb tablespace taken at BK3 without prompting
  3. 发出带有 END OF LOGS 选项的 ROLLFORWARD DATABASE 命令并指定要复原的表空间(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs tablespace (USERSP1, USERSP3)

    前滚将所有日志最多重放至 PIT,然后对这两个表空间停止,因为自第一次前滚以来尚未对它们执行任何操作。

  4. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

示例 3

下列命令只将 SYSCATSPACE 和 USERSP1 重建至日志末尾:
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in image 
                taken at BK1 without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的,但只有 SYSCATSPACE 和 USERSP1 处于 NORMAL 状态。USERSP2 和 USERSP3 处于 RESTORE_PENDING 状态。

示例 4

在以下示例中,备份 BK1 和 BK2 不再位于历史记录文件中所述的那个位置,但发出重建时并不知道这一点。
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令,并指定想要将整个数据库重建至最新时间点:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK3 without prompting
    此时成功地复原了目标映像,但从 RESTORE 实用程序返回一个错误,说明无法找到所需的映像。
  2. 现在必须手动完成重建。因为数据库处于重建阶段,所以可以按如下所示完成重建:
    1. 发出 RESTORE DATABASE 命令并指定 BK1 备份映像的位置:
         db2 restore db mydb tablespace taken at BK1 from <location>
                  without prompting              
    2. 发出 RESTORE DATABASE 命令并指定 BK2 备份映像的位置:
            db2 restore db mydb tablespace (USERSP2) taken at BK2 from 
            <location> without prompting              
    3. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
            db2 rollforward db mydb to end of logs            
    4. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
            db2 rollforward db mydb stop

此时,该数据库是可连接的并且所有表空间都处于 NORMAL 状态。

示例 5

在本例中,USERSP3 表空间包含生成特定报告需要的独立数据,但是您并不希望报告的生成妨碍原始数据库。为了访问数据而不影响原始数据库,可以使用 REBUILD 生成只有这个表空间和 SYSCATSPACE 的新数据库。为了使数据库在进行复原和前滚操作后仍然可以连接,所以同时也需要 SYSCATSPACE。

使用 SYSCATSPACE 和 USERSP3 中最新的数据构建新的数据库:
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令,并指定将 SYSCATSPACE 和 USERSP3 表空间复原到一个新的数据库 NEWDB 中:
           db2 restore db mydb rebuild with tablespace (SYSCATSPACE, USERSP3)
                taken at BK3 into newdb without prompting
  2. 在 NEWDB 上发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令 (这项命令假定所有的日志已被保存并可访问):
        db2 rollforward db newdb to end of logs
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db newdb stop
此时,新数据库是可连接的,并且只有 SYSCATSPACE 和 USERSP3 处于 NORMAL 状态。USERSP1 和 USERSP2 处于 RESTORE_PENDING 状态。
注: 如果现有数据库和新数据库之间的容器路径有问题(例如,如果因为文件系统不存在而需更改原始数据库的容器,或容器正被原始数据库使用),那么需要执行重定向复原。以上示例假设对表空间使用了缺省的自动存储数据库路径。

情况 2

在以下示例中,有一个称为 MYDB 的可恢复数据库,该数据库具有 SYSCATSPACE 和 1000 个名为 Txxxx 的用户表空间,其中 x 表示表空间号(例如 T0001)。有一个完整数据库备份映像(BK1)

示例 6

下列命令复原除 T0999 和 T1000 之外的所有表空间:
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in image except 
                tablespace (T0999, T1000) taken at BK1 without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的,并且除 T0999 和 T1000 之外的所有表空间都处于 NORMAL 状态。T0999 和 T1000 处于 RESTORE_PENDING 状态。

情况 3

这种情况中的示例演示了如何使用增量备份来重建可恢复数据库。在下列示例中,有一个称为 MYDB 的数据库,该数据库中存在下列表空间:
  • SYSCATSPACE(系统目录)
  • USERSP1(数据表空间)
  • USERSP2(用户数据表空间)
  • USERSP3(用户数据表空间)
进行了下列备份:
  • FULL1 是 SYSCATSPACE、USERSP1、USERSP2 和 USERSP3 的完整备份
  • DELTA1 是 SYSCATSPACE 和 USERSP1 的差异备份
  • INCR1 是 USERSP2 和 USERSP3 的增量备份
  • DELTA2 是 SYSCATSPACE、USERSP1、USERSP2 和 USERSP3 的差异备份
  • DELTA3 是 USERSP2 的差异备份
  • FULL2 是 USERSP1 的完整备份

示例 7

下列命令使用增量自动复原仅将 SYSCATSPACE 和 USERSP2 重建至最新时间点。
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令。INCREMENTAL AUTO 选项是可选的。RESTORE 实用程序将检测映像的详细程度,并在需要时使用自动增量复原。
          db2 restore db mydb rebuild with tablespace (SYSCATSPACE, USERSP2) 
                incremental auto taken at DELTA3 without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的,但只有 SYSCATSPACE 和 USERSP2 处于 NORMAL 状态。USERSP1 和 USERSP3 处于 RESTORE_PENDING 状态。

示例 8

下列命令使用增量自动复原将整个数据库重建至最新时间点。
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令。INCREMENTAL AUTO 选项是可选的。RESTORE 实用程序将检测映像的详细程度,并在需要时使用自动增量复原。
          db2 restore db mydb rebuild with all tablespaces in database 
                incremental auto taken at DELTA3 without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的并且所有表空间都处于 NORMAL 状态。

示例 9

下列命令将整个数据库(USERSP3 除外)重建至最新时间点。
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令。虽然目标映像是非增量映像,但 RESTORE 实用程序还是检测必需的重建链是否包括增量映像,并且将以增量方式自动复原这些映像。
          db2 restore db mydb rebuild with all tablespaces in database except 
                tablespace (USERSP3) taken at FULL2 without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

情况 4

这种情况中的示例演示了如何使用包含日志文件的备份映像来重建可恢复数据库。在下列示例中,有一个称为 MYDB 的数据库,该数据库中存在下列表空间:
  • SYSCATSPACE(系统目录)
  • USERSP1(用户数据表空间)
  • USERSP2(用户数据表空间)

示例 10

下列命令仅将数据库中的 SYSCATSPACE 和 USERSP2 重建至最新时间点。有一个完整联机数据库备份映像(BK1),它包含日志文件。
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with tablespace (SYSCATSPACE, USERSP2) 
                taken at BK1 logtarget /logs without prompting
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定 BK1 末尾之后的所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs overflow log path (/logs)
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的,但只有 SYSCATSPACE 和 USERSP2 处于 NORMAL 状态。USERSP1 处于 RESTORE_PENDING 状态。

示例 11

下列命令将数据库重建至最新时间点。有两个包含日志文件的完整联机表空间备份映像:
  • BK1 是 SYSCATSPACE 的备份,使用日志文件 10-45
  • BK2 是 USERSP1 和 USERSP2 的备份,使用日志文件 64-80
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK2 logtarget /logs without prompting
    前滚操作将从日志文件 10 开始,如果该文件不在主日志文件路径中,那么它总是位于溢出日志路径中。由于日志范围 46-63 未包含在任何备份映像中,所以需要使它们可用于前滚操作。
  2. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令,并使用日志文件 64-80 的溢出日志路径:
          db2 rollforward db mydb to end of logs overflow log path (/logs)
  3. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的并且所有表空间都处于 NORMAL 状态。

情况 5

在下列示例中,有一个称为 MYDB 的可恢复数据库,该数据库中存在下列表空间:
  • SYSCATSPACE (0),SMS 系统目录(相对容器)
  • USERSP1 (1) SMS 用户数据表空间(相对容器)
  • USERSP2 (2) DMS 用户数据表空间(绝对容器 /usersp2)
  • USERSP3 (3) DMS 用户数据表空间(绝对容器 /usersp3)
进行了下列备份:
  • BK1 是 SYSCATSPACE 和 USERSP1 的备份
  • BK2 是 USERSP2 和 USERSP3 的备份
  • BK3 是 USERSP3 的备份

示例 12

下列命令使用重定向复原将整个数据库重建至最新时间。
  1. 发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK3 redirect without prompting
  2. 对想要重新定义其容器的每个表空间发出 SET TABLESPACE CONTAINERS 命令。例如:
          db2 set tablespace containers for 3 using (file '/newusersp2' 10000)
  3.       db2 set tablespace containers for 4 using (file '/newusersp3' 15000)
  4. 发出带有 CONTINUE 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb continue
  5. 发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  6. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库是可连接的并且所有表空间都处于 NORMAL 状态。

情况 6

在下列示例中,有一个称为 MYDB 的数据库,它具有三个数据库分区:
  • 数据库分区 1 包含表空间 SYSCATSPACE、USERSP1 和 USERSP2,它是目录分区
  • 数据库分区 2 包含表空间 USERSP1 和 USERSP3
  • 数据库分区 3 包含表空间 USERSP1、USERSP2 和 USERSP3
进行了下列备份,其中 BKxy 表示分区 y 上的备份编号 x:
  • BK11 是 SYSCATSPACE、USERSP1 和 USERSP2 的备份
  • BK12 是 USERSP2 和 USERSP3 的备份
  • BK13 是 USERSP1、USERSP2 和 USERSP3 的备份
  • BK21 是 USERSP1 的备份
  • BK22 是 USERSP1 的备份
  • BK23 是 USERSP1 的备份
  • BK31 是 USERSP2 的备份
  • BK33 是 USERSP2 的备份
  • BK42 是 USERSP3 的备份
  • BK43 是 USERSP3 的备份

示例 13

下列命令将整个数据库重建至日志末尾。
  1. 在数据库分区 1 上,发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK31 without prompting
  2. 在数据库分区 2 上,发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with tablespaces in database taken at 
                BK42 without prompting
  3. 在数据库分区 3 上,发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK43 without prompting 
  4. 在目录分区上,发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令(假定在所有数据库分区上,所有日志都已保存并且可以访问):
          db2 rollforward db mydb to end of logs            
  5. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop

此时,该数据库在所有数据库分区上都是可连接的,并且所有表空间都处于 NORMAL 状态。

示例 14

下列示例将 SYSCATSPACE、USERSP1 和 USERSP2 重建至最新时间点。
  1. 在数据库分区 1 上,发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in database 
                taken at BK31 without prompting
  2. 在数据库分区 2 上,发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in image taken at 
                BK22 without prompting
  3. 在数据库分区 3 上,发出带有 REBUILD 选项的 RESTORE DATABASE 命令:
          db2 restore db mydb rebuild with all tablespaces in image taken at 
                BK33 without prompting 
    注意:此命令省略了 USERSP1,它是完成重建操作所必需的。
  4. 在目录分区上,发出带有 TO END OF LOGS 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb to end of logs            
  5. 发出带有 STOP 选项的 ROLLFORWARD DATABASE 命令:
          db2 rollforward db mydb stop
    前滚成功,并且该数据库在所有数据库分区上都是可连接的。所有表空间都处于 NORMAL 状态,但 USERSP3 和 USERSP1 除外(USERSP3 在它所在的所有数据库分区上处于 RESTORE PENDING 状态,而 USERSP1 在数据库分区 3 上处于 RESTORE PENDING 状态)。
    尝试访问数据库分区 3 上 USERSP1 中的数据时,将发生数据访问错误。要修正此错误,需要恢复 USERSP1:
    1. 在数据库分区 3 上,发出 RESTORE DATABASE 命令并指定包含 USERSP1 的备份映像:
            db2 restore db mydb tablespace taken at BK23 without prompting             
    2. 在目录分区上,发出带有 TO END OF LOGS 选项和 AND STOP 选项的 ROLLFORWARD DATABASE 命令:
            db2 rollforward db mydb to end of logs on dbpartitionnum (3) and stop          

此时,可以访问数据库分区 3 上 USERSP1 中的数据,因为 USERSP1 处于 NORMAL 状态。

情况 7

在下列示例中,有一个称为 MYDB 的不可恢复数据库,它具有下列表空间:
  • SYSCATSPACE (0),SMS 系统目录
  • USERSP1 (1) SMS 用户数据表空间
  • USERSP2 (2) DMS 用户数据表空间
  • USERSP3 (3) DMS 用户数据表空间

只有该数据库的一个备份 BK1:

例 15

下列命令演示了如何对不可恢复数据库使用重建。

仅使用 SYSCATSPACE 和 USERSP1 重建数据库:
      db2 restore db mydb rebuild with tablespace (SYSCATSPACE, USERSP1) 
            taken at BK1 without prompting

复原之后,该数据库是可连接的。如果发出 LIST TABLESPACES 命令或使用 MON_GET_TABLESPACE 表函数,您将看到 SYSCATSPACE 和 USERSP1 处于 NORMAL 状态,而 USERSP2 和 USERSP3 处于 DELETE_PENDING/OFFLINE 状态。现在就可以使用处于 NORMAL 状态的那两个表空间了。

如果想要备份数据库,那么首先需要使用 DROP TABLESPACE 命令删除 USERSP2 和 USERSP3,否则备份将失败。

要在以后复原 USERSP2 和 USERSP3,需要从 BK1 重新发出数据库复原操作。