结尾日志备份

本主题仅与使用完整恢复模式或大容量日志恢复模式的数据库相关。

对于大多数情况,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 及更高版本要求您备份日志结尾以捕获尚未备份的日志记录。还原操作之前对日志尾部执行的日志备份称为“结尾日志备份”。

SQL Server 2005 及更高版本通常要求您在开始还原数据库前执行结尾日志备份。结尾日志备份可以防止工作丢失并确保日志链的完整性。将数据库恢复到故障点时,结尾日志备份是恢复计划中的最后一个相关备份。如果无法备份日志尾部,则只能将数据库恢复为故障前创建的最后一个备份。

并非所有还原方案都要求执行结尾日志备份。如果先前的日志备份中包含恢复点,或者您准备移动或替换(覆盖)数据库,并且在最新备份后不需要将该数据库恢复到某一时间点,则无需使用结尾日志备份。此外,如果日志文件受损且无法创建结尾日志备份,则必须在不使用结尾日志备份的情况下还原数据库。在最新日志备份之后提交的任何事务都将丢失。有关详细信息,请参阅本主题下文中的“不使用结尾日志备份执行还原操作”。

备份日志尾部

结尾日志备份与任何其他日志备份类似,使用 BACKUP LOG 语句执行。建议您在下列情况下执行结尾日志备份:

  • 如果数据库处于联机状态并且您计划对数据库执行还原操作,则请在开始还原操作之前,使用 WITH NORECOVERY 备份日志尾部:

    BACKUP LOG 数据库名称 TO <备份设备> WITH NORECOVERY

    注意注意

    为防止出错,必须使用 NORECOVERY 选项。

  • 如果数据库处于脱机状态并且无法启动。

    尝试执行结尾日志备份。由于此时不会发生任何事务,所以 WITH NORECOVERY 是可选的。如果数据库受损,请使用 WITH CONTINUE_AFTER_ERROR,如下所示:

    BACKUP LOG 数据库名称 TO < 备份设备> WITH CONTINUE_AFTER_ERROR

    如果数据库受损(例如,数据库无法启动),则仅当日志文件未受损、数据库处于支持结尾日志备份的状态并且不包含任何大容量日志更改时,结尾日志备份才能成功。

下表对这些选项进行了汇总。

BACKUP LOG 选项

注释

NORECOVERY

每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY。NORECOVERY 使数据库进入还原状态。这确保了数据库在结尾日志备份后不会更改。

除非同时指定 NO_TRUNCATE 或 COPY_ONLY 选项,否则将截断日志。

重要说明重要提示
除非数据库受损,否则不建议使用 NO_TRUNCATE。

CONTINUE_AFTER_ERROR

仅当您要备份受损数据库的尾部时,才使用 CONTINUE_AFTER_ERROR。

注意注意
对受损数据库备份日志尾部时,日志备份中正常捕获的部分元数据可能不可用。有关详细信息,请参阅本主题下文中的“包含不完整备份元数据的结尾日志备份”。

在数据库损坏时创建事务日志备份

包含不完整备份元数据的结尾日志备份

结尾日志备份可捕获日志尾部,即使数据库脱机、损坏或缺少数据文件。这可能导致还原信息命令和 msdb 生成不完整的元数据。但只有元数据是不完整的,而捕获的日志是完整且可用的。

如果结尾日志备份包含不完整的元数据,则 backupset 表中的 has_incomplete_metadata 将设置为 1。此外,在 RESTORE HEADERONLY 的输出中,HasIncompleteMetadata 将设置为 1

如果结尾日志备份中的元数据不完整,则 backupfilegroup 表在结尾日志备份时将丢失文件组的大多数相关信息。大多数 backupfilegroup 表列为 NULL;只有以下几列有意义:

  • backup_set_id

  • filegroup_id

  • type

  • type_desc

  • is_readonly

不使用结尾日志备份执行还原

不需要结尾日志备份的还原方案包括以下几种:

更改历史记录

更新的内容

更新了“备份日志尾部”部分,以更正有关在数据库脱机且未启动时执行尾部日志备份的信息。