结尾日志备份 (SQL Server)

适用范围:SQL Server

本文仅与使用完整恢复模式或大容量日志恢复模式的 SQL Server 数据库的备份和还原相关。

“结尾日志备份”捕获尚未备份的任何日志记录(日志尾部),以防工作丢失并确保日志链完好无损。 在将 SQL Server 数据库恢复到其最近一个时间点之前,必须先备份数据库的事务日志。 结尾日志备份是数据库恢复计划中相关的最后一个备份。

并非所有还原情形都需要尾日志备份。 如果恢复点包含在较早的日志备份中,则无需结尾日志备份。 如果要移动或替换(覆盖)数据库,并且不需要将其还原到最近一次备份之后的某个时间点,则无需进行尾日志备份。

需要结尾日志备份的场景

建议您在以下方案中执行结尾日志备份:

  • 如果数据库处于联机状态并且您计划对数据库执行还原操作,则从备份日志结尾开始。 若要避免对联机数据库执行操作时出错,必须使用 BACKUP Transact-SQL 语句的 WITH NORECOVERY 选项。

  • 如果数据库处于脱机状态而无法启动,则需要还原数据库,从备份日志结尾开始。 由于此时不会发生任何事务,因此请使用 WITH NO_TRUNCATE 选项。 NO_TRUNCATE 实际上与仅复制事务日志备份相同。 使用 WITH NORECOVERY 是可选的,因为此时不会发生任何事务。

  • 如果数据库损坏,则尝试使用 WITH CONTINUE_AFTER_ERROR 语句的 BACKUP 选项执行结尾日志备份。

    在损坏的数据库上,仅当日志文件未受损、数据库处于支持结尾日志备份的状态并且数据库不包含任何大容量日志更改时,日志尾部备份才会成功。 如果无法创建结尾日志备份,则最新日志备份后提交的任何事务都将丢失。

下表汇总了用于 BACKUPNORECOVERYNO_TRUNCATECONTINUE_AFTER_ERROR 选项。

BACKUP LOG 选项 注释
NORECOVERY 如果打算对数据库继续执行还原操作,请使用 NORECOVERYNORECOVERY 使数据库进入还原状态。 此步骤确保数据库在结尾日志备份后不会发生更改。 除非还指定了 NO_TRUNCATE 选项或 COPY_ONLY 选项,否则日志将被截断。

重要提示:除非数据库受损或脱机,否则不建议使用 NO_TRUNCATE。 在使用 NORECOVERY 执行还原之前,您可能需要将数据库置于 单用户模式,以获得独占访问权限。 还原后,请将数据库重新设置为多用户模式。
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

相关任务

若要创建结尾日志备份,请参阅在数据库损坏时备份事务日志 (SQL Server)

若要还原事务日志备份,请参阅还原事务日志备份 (SQL Server)