示例:数据库的段落还原(完整恢复模式)

段落还原顺序将从主文件组及所有具有读写权限的辅助文件组开始,在文件组级别分阶段还原和恢复数据库。

在此示例中,数据库 adb 将在发生灾难性事件后还原到一台新计算机。该数据库使用完整恢复模式,因此,开始进行还原之前必须先获取数据库的结尾日志备份。发生灾难性事件前所有文件组都处于联机状态。文件组 B 是只读的。必须还原所有辅助文件组,但这些辅助文件组将按重要性顺序进行还原:A(最高)、C,最后是 B。在此示例中,存在四个日志备份,其中包括结尾日志备份。

结尾日志备份

在还原数据库之前,数据库管理员必须先备份日志尾部。由于数据库已损坏,因此创建结尾日志备份需要使用 NO_TRUNCATE 选项:

BACKUP LOG adb TO tailLogBackup WITH NORECOVERY, NO_TRUNCATE

结尾日志备份是在以下还原顺序中应用的最后一个备份。

还原顺序

  1. 部分还原主文件组和辅助文件组 A。

    RESTORE DATABASE adb FILEGROUP='Primary' FROM backup1 
       WITH PARTIAL, NORECOVERY
    RESTORE DATABASE adb FILEGROUP='A' FROM backup2 
       WITH NORECOVERY
    RESTORE LOG adb FROM backup3 WITH NORECOVERY
    RESTORE LOG adb FROM backup4 WITH NORECOVERY
    RESTORE LOG adb FROM backup5 WITH NORECOVERY
    RESTORE LOG adb FROM tailLogBackup WITH RECOVERY
    
  2. 联机还原文件组 C。

    此时,主文件组和辅助文件组 A 处于联机状态。文件组 B 和 C 中的所有文件都处于恢复挂起状态,这两个文件组处于脱机状态。

    来自步骤 1 中的最后一条 RESTORE LOG 语句的消息指出:由于文件组 C 不可用,因此涉及此文件组的事务回滚已延迟。可继续执行常规操作,但这些事务将持有锁并且在完成回滚前不会截断日志。

    在第二个还原顺序中,数据库管理员将还原文件组 C:

    RESTORE DATABASE adb FILEGROUP='C' FROM backup2a WITH NORECOVERY
    RESTORE LOG adb FROM backup3 WITH NORECOVERY
    RESTORE LOG adb FROM backup4 WITH NORECOVERY
    RESTORE LOG adb FROM backup5 WITH NORECOVERY
    RESTORE LOG adb FROM tailLogBackup WITH RECOVERY
    

    此时主文件组及文件组 A 和 C 处于联机状态。文件组 B 中的文件处于恢复挂起状态,该文件组处于脱机状态。解析延迟的事务后,日志被截断。

  3. 联机还原文件组 B。

    在第三个还原顺序中,数据库管理员将还原文件组 B。文件组 B 的备份是在该文件组变为只读状态之后进行的,因此,在恢复过程中无需将其前滚。

    RESTORE DATABASE adb FILEGROUP='B' FROM backup2b WITH RECOVERY
    

    所有文件组现在都处于联机状态。