本主题仅适用于使用完整或大容量日志恢复模式的 SQL Server 数据库的备份和还原。
结尾日志备份捕获尚未备份的任何日志记录(日志尾部),以防止工作丢失并保持日志链不变。 在将 SQL Server 数据库恢复到其最新时间点之前,必须备份其事务日志的尾部。 结尾日志备份将是数据库恢复计划中关注的最后一个备份。
注释
并非所有还原方案都需要结尾日志备份。 如果恢复点包含在以前的日志备份中,则不需要尾日志备份。 此外,如果您移动或覆盖一个数据库,并且不需要将其还原到最近备份后的某个时间点,则不需要执行结尾日志备份。
需要 Tail-Log 备份的场景
建议在以下情况下执行尾部日志备份:
如果数据库处于联机状态,并且你计划对数据库执行还原作,请首先备份日志的结尾。 若要避免联机数据库出错,必须使用 ... BACKUPTransact-SQL 语句的 WITH NORECOVERY 选项。
如果数据库处于脱机状态并且无法启动,并且需要还原数据库,请先备份日志的结尾。 由于目前无法发生任何事务,因此使用 WITH NORECOVERY 是可选的。
如果数据库损坏,请尝试使用 BACKUP 语句中的选项 WITH CONTINUE_AFTER_ERROR 进行尾部日志备份。
在损坏的数据库上进行日志尾部备份仅在以下情况下才能成功:日志文件未损坏,数据库处于支持尾日志备份的状态,并且数据库不包含任何批量记录的更改。 如果无法创建结尾日志备份,则丢失最新日志备份后提交的任何事务。
下表汇总了 BACKUP NORECOVERY 和 CONTINUE_AFTER_ERROR 选项。
| BACKUP LOG 选项 | 注释 |
|---|---|
| NORECOVERY | 每当打算继续对数据库执行还原作时,请使用 NORECOVERY。 NORECOVERY 使数据库进入还原状态。 这可以保证数据库在结尾日志备份后不会更改。 除非还指定了NO_TRUNCATE选项或COPY_ONLY选项,否则日志将被截断。 **重要** 建议避免使用NO_TRUNCATE,但数据库损坏时除外。 |
| 在错误后继续 | 仅当备份损坏的数据库尾部时,才使用CONTINUE_AFTER_ERROR。 注意:在损坏的数据库上使用日志尾部备份时,日志备份中通常捕获的一些元数据可能不可用。 详细信息可在本主题后面的Tail-Log 具有不完整备份元数据的备份中找到。 |
具有不完整备份元数据的 Tail-Log 备份
即使数据库脱机、损坏或缺少数据文件,结尾日志备份也会捕获日志的尾部。 这可能会导致还原信息命令和 msdb 中的元数据不完整。 但是,只有元数据是不完整的,而捕获的日志是完整且完好的,可以使用。
如果结尾日志备份的元数据不完整,则 备份集 表中 has_incomplete_metadata 设置为 1。 此外,在 RESTORE HEADERONLY 的输出中, HasIncompleteMetadata 设置为 1。
如果结尾日志备份中的元数据不完整, 则备份文件组 表将在结尾日志备份时缺少有关文件组的大部分信息。 大多数 backupfilegroup 表列均为 NULL;唯一有意义的列如下所示:
backup_set_id
filegroup_id
类型
类型描述
is_readonly
相关任务
若要创建结尾日志备份,请参阅在数据库损坏时备份事务日志(SQL Server)。
若要还原事务日志备份,请参阅还原事务日志备份(SQL Server)。
另请参阅
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
SQL Server 数据库的备份和还原
仅复制备份 (SQL Server)
事务日志备份 (SQL Server)
应用事务日志备份 (SQL Server)