对于大多数情况,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 及更高版本要求您备份日志结尾以捕获尚未备份的日志记录.还原操作之前对日志尾部执行的日志备份称为"结尾日志备份".
SQL Server 2005 及更高版本通常要求您在开始还原数据库前执行结尾日志备份.结尾日志备份可以防止工作丢失并确保日志链的完整性.将数据库恢复到故障点时,结尾日志备份是恢复计划中的最后一个相关备份.如果无法备份日志尾部,则只能将数据库恢复为故障前创建的最后一个备份.
并非所有还原方案都要求执行结尾日志备份.如果先前的日志备份中包含恢复点,或者您准备移动或替换(覆盖)数据库,则不一定需要结尾日志备份.并且,如果日志文件受损且无法创建结尾日志备份,则必须在不使用结尾日志备份的情况下还原数据库.最新日志备份后提交的任何事务都将丢失
备份日志尾部
结尾日志备份与任何其他日志备份类似,使用 BACKUP LOG 语句执行.建议下列情况下执行结尾日志备份:
- 如果数据库处于联机状态,每当您准备对数据库执行的下一个操作为还原操作时,请在开始还原顺序之前使用 WITH NORECOVERY 备份日志尾部: BACKUP LOG 数据库名称 TO <备份设备> WITH NORECOVERY
注意:为防止出错,必须使用 NORECOVERY 选项(指定不发生回滚).
- 如果数据库处于脱机状态并且无法启动. 尝试执行结尾日志备份.由于此时不会发生任何事务,所以 WITH NORECOVERY 是可选的.如果数据库受损,请使用 WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE. BACKUP LOG 数据库名称 TO <备份设备> [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }
重要提示:除非数据库受损,否则不建议使用 NO_TRUNCATE.
如果数据库受损(例如,数据库无法启动),则仅当日志文件未受损,数据库处于支持结尾日志备份的状态并且不包含任何大容量日志更改时,结尾日志备份才能成功.
BACKUP LOG 选项 |
注释 |
NORECOVERY |
每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY.NORECOVERY 使数据库进入还原状态.这确保了数据库在结尾日志备份后不会更改. 除非同时指定 NO_TRUNCATE 或 COPY_ONLY 选项,否则将截断日志. |
{ CONTINUE_AFTER_ERROR | NO_TRUNCATE } |
仅当您要备份受损数据库的尾部时才能使用 NO_TRUNCATE 或 CONTINUE_AFTER_ERROR. 注意:对受损数据库备份日志尾部时,日志备份中正常捕获的部分元数据可能不可用. |
在数据库损坏时创建事务日志备份
- 如何在数据库损坏时备份事务日志 (Transact-SQL)
- 如何备份事务日志 (SQL Server Management Studio)
包含不完整备份元数据的结尾日志备份
结尾日志备份可捕获日志尾部,即使数据库脱机,损坏或缺少数据文件.这可能导致还原信息命令和msdb生成不完整的元数据.但只有元数据是不完整的,而捕获的日志是完整且可用的.
如果结尾日志备份包含不完整的元数据,则 backupset 表中的has_incomplete_metadata将设置为1.此外,在 RESTORE HEADERONLY 的输出中,HasIncompleteMetadata将设置为1.
如果结尾日志备份中的元数据不完整,则 backupfilegroup 表在结尾日志备份时将丢失文件组的大多数相关信息.大多数backupfilegroup表列为 NULL;只有以下几列有意义:
- backup_set_id
- filegroup_id
- type
- type_desc
- is_readonly
不使用结尾日志备份执行还原
不需要结尾日志备份的还原方案包括以下几种:
- 将数据库还原到先前日志备份中包含的某个时间点. 如果还原一个数据库并在还原顺序中的每个 RESTORE 语句中指定 STOPAT,STOPATMARK 或 STOPBEFOREMARK 选项,则不必进行结尾日志备份.
将数据库还原到先前时间点
- 若要使用 Transact-SQL 还原到特定时间点,请参阅如何还原到某个时间点 (Transact-SQL),恢复到标记的事务或恢复到日志序列号 (LSN).
- 若要使用 SQL Server Management Studio,请参阅如何还原到某个时点 (SQL Server Management Studio)或如何将数据库还原到标记的事务 (SQL Server Management Studio).
- 将数据库副本还原到新位置. 当您还原数据库时,只有将数据库还原到不同的服务器实例时,才可以使用相同的数据库名称,例如,创建镜像数据库用于数据库镜像或创建辅助数据库用于日志传送.如果在同一服务器实例上移动数据库,您必须为数据库指定新名称.
将数据库还原到新位置
- 在还原顺序的每个 RESTORE 语句中,使用 Transact-SQL 指定 MOVE 选项.
- 使用 SQL Server Management Studio,在
对于大多数情况,在完整恢复模式或大容量日志恢复模式下,SQL Server 2005 及更高版本要求您备份日志结尾以捕获尚未备份的日志记录.还原操作之前对日志尾部执行的日志备份称为”结尾日志备份”.
SQL Server 2005 及更高版本通常要求您在开始还原数据库前执行结尾日志备份.结尾日志备份可以防止工作丢失并确保日志链的完整性.将数据库恢复到故障点时,结尾日志备份是恢复计划中的最后一个相关备份.如果无法备份日志尾部,则只能将数据库恢复为故障前创建的最后一个备份.
并非所有还原方案都要求执行结尾日志备份.如果先前的日志备份中包含恢复点,或者您准备移动或替换(覆盖)数据库,则不一定需要结尾日志备份.并且,如果日志文件受损且无法创建结尾日志备份,则必须在不使用结尾日志备份的情况下还原数据库.最新日志备份后提交的任何事务都将丢失
备份日志尾部
结尾日志备份与任何其他日志备份类似,使用 BACKUP LOG 语句执行.建议下列情况下执行结尾日志备份:
- 如果数据库处于联机状态,每当您准备对数据库执行的下一个操作为还原操作时,请在开始还原顺序之前使用 WITH NORECOVERY 备份日志尾部: BACKUP LOG 数据库名称 TO <备份设备> WITH NORECOVERY
注意:为防止出错,必须使用 NORECOVERY 选项(指定不发生回滚).
- 如果数据库处于脱机状态并且无法启动. 尝试执行结尾日志备份.由于此时不会发生任何事务,所以 WITH NORECOVERY 是可选的.如果数据库受损,请使用 WITH CONTINUE_AFTER_ERROR 或 WITH NO_TRUNCATE. BACKUP LOG 数据库名称 TO <备份设备> [WITH { CONTINUE_AFTER_ERROR | NO_TRUNCATE }
重要提示:除非数据库受损,否则不建议使用 NO_TRUNCATE.
如果数据库受损(例如,数据库无法启动),则仅当日志文件未受损,数据库处于支持结尾日志备份的状态并且不包含任何大容量日志更改时,结尾日志备份才能成功.
BACKUP LOG 选项 |
注释 |
NORECOVERY |
每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY.NORECOVERY 使数据库进入还原状态.这确保了数据库在结尾日志备份后不会更改. 除非同时指定 NO_TRUNCATE 或 COPY_ONLY 选项,否则将截断日志. |
{ CONTINUE_AFTER_ERROR | NO_TRUNCATE } |
仅当您要备份受损数据库的尾部时才能使用 NO_TRUNCATE 或 CONTINUE_AFTER_ERROR. 注意:对受损数据库备份日志尾部时,日志备份中正常捕获的部分元数据可能不可用. |
在数据库损坏时创建事务日志备份
- 如何在数据库损坏时备份事务日志 (Transact-SQL)
- 如何备份事务日志 (SQL Server Management Studio)
包含不完整备份元数据的结尾日志备份
结尾日志备份可捕获日志尾部,即使数据库脱机,损坏或缺少数据文件.这可能导致还原信息命令和msdb生成不完整的元数据.但只有元数据是不完整的,而捕获的日志是完整且可用的.
如果结尾日志备份包含不完整的元数据,则 backupset 表中的has_incomplete_metadata将设置为1.此外,在 RESTORE HEADERONLY 的输出中,HasIncompleteMetadata将设置为1.
如果结尾日志备份中的元数据不完整,则 backupfilegroup 表在结尾日志备份时将丢失文件组的大多数相关信息.大多数backupfilegroup表列为 NULL;只有以下几列有意义:
- backup_set_id
- filegroup_id
- type
- type_desc
- is_readonly
不使用结尾日志备份执行还原
不需要结尾日志备份的还原方案包括以下几种:
- 将数据库还原到先前日志备份中包含的某个时间点. 如果还原一个数据库并在还原顺序中的每个 RESTORE 语句中指定 STOPAT,STOPATMARK 或 STOPBEFOREMARK 选项,则不必进行结尾日志备份.
将数据库还原到先前时间点
- 若要使用 Transact-SQL 还原到特定时间点,请参阅如何还原到某个时间点 (Transact-SQL),恢复到标记的事务或恢复到日志序列号 (LSN).
- 若要使用 SQL Server Management Studio,请参阅如何还原到某个时点 (SQL Server Management Studio)或如何将数据库还原到标记的事务 (SQL Server Management Studio).
- 将数据库副本还原到新位置. 当您还原数据库时,只有将数据库还原到不同的服务器实例时,才可以使用相同的数据库名称,例如,创建镜像数据库用于数据库镜像或创建辅助数据库用于日志传送.如果在同一服务器实例上移动数据库,您必须为数据库指定新名称.
将数据库还原到新位置
- 在还原顺序的每个 RESTORE 语句中,使用 Transact-SQL 指定 MOVE 选项.
- 使用 SQL Server Management Studio,在"还原数据库"("选项"页)的"还原为"字段中指定每个文件的新位置.
- 完整替换(覆盖)数据库.
注意:应当尽量避免使用 REPLACE 选项执行还原,并且只有经验丰富的数据库管理员在慎重考虑后才能这样做.
- PLACE 选项.
- 使用 SQL Server Management Studio,在"还原数据库"("选项"页)的"还原为"字段中指定每个文件的新位置.
- "还原数据库"("选项"页)的"还原为"字段中指定每个文件的新位置.
- 完整替换(覆盖)数据库.
注意:应当尽量避免使用 REPLACE 选项执行还原,并且只有经验丰富的数据库管理员在慎重考虑后才能这样做.
- PLACE 选项.
- 使用 SQL Server Management Studio,在"还原数据库"("选项"页)的"还原为"字段中指定每个文件的新位置.