本主题仅与完整恢复模式或大容量日志恢复模式相关。
本主题介绍如何在还原 SQL Server 数据库时应用事务日志备份。
在本主题中:
还原事务日志备份的要求
若要应用事务日志备份,必须满足以下要求:
还原序列的日志备份足够: 必须备份足够的日志记录才能完成还原序列。 必要的日志备份(包括所需的 结尾日志备份 )必须在还原序列开始之前可用。
正确的还原顺序: 必须首先还原之前的完整数据库备份或差异数据库备份。 然后,必须按时间顺序还原在该完整数据库备份或差异数据库备份之后创建的所有事务日志。 如果此日志链中的事务日志备份丢失或损坏,则只能在缺少的事务日志之前还原事务日志。
数据库尚未恢复: 在应用最终事务日志之前,无法恢复数据库。 如果在还原日志链中间的某个事务日志备份后恢复数据库,那么在不重新启动完整还原序列(从完整数据库备份开始)的情况下,无法将数据库还原到该点之后。
小窍门
最佳做法是还原所有日志备份(RESTORE LOG database_name WITH NORECOVERY)。 然后,在还原最后一个日志备份后,通过单独的操作恢复数据库(RESTORE DATABASE database_name WITH RECOVERY)。
恢复和事务日志
完成还原操作且恢复数据库之后,恢复会回滚所有不完整的事务。 这称为 撤销阶段。 需要回滚才能还原数据库的完整性。 回滚后,数据库将联机,不能再将事务日志备份应用于数据库。
例如,一系列事务日志备份包含运行时间较长的事务。 事务的开始记录在第一个事务日志备份中,但事务结束记录在第二个事务日志备份中。 第一个事务日志备份中没有提交或回滚操作的记录。 如果在应用第一个事务日志备份时运行恢复操作,则长时间运行的事务被视为不完整,并且事务的第一个事务日志备份中记录的数据修改将被回滚。 SQL Server 不允许在此点后应用第二个事务日志备份。
注释
在某些情况下,可以在日志还原期间显式添加文件。
使用日志备份恢复到故障发生点
假定以下事件序列。
| 时间 | 事件 / 活动 |
|---|---|
| 上午 8:00 | 备份数据库以创建完整数据库备份。 |
| 中午 | 备份事务日志。 |
| 下午 4:00 | 备份事务日志。 |
| 下午 6:00 | 备份数据库以创建完整数据库备份。 |
| 晚上 8:00 | 备份事务日志。 |
| 晚上 9:45 | 发生失败。 |
注释
有关此示例备份序列的说明,请参阅事务日志备份(SQL Server)。
若要在晚上 9:45(故障点)将数据库还原到其状态,可以使用以下任一替代过程:
替代方法 1:使用最新的完整数据库备份还原数据库
在出现故障时创建当前的活动事务日志的尾日志备份。
请勿还原上午 8:00 的完整数据库备份。 请还原最近的晚上6:00完整数据库备份,然后应用晚上8:00的日志备份和尾日志备份。
替代方法 2:使用以前的完整数据库备份还原数据库
注释
如果问题阻止你使用下午 6:00 的完整数据库备份,则此替代过程非常有用。 此过程所需的时间比下午六点的完整数据库备份还原时间更长。
根据故障点创建当前活动事务日志的结尾日志备份。
还原上午 8:00 的完整数据库备份,然后按顺序还原所有四个事务日志备份。 这会将所有已完成的事务结转到晚上9点45分。
此替代方法指出了通过跨一系列完整数据库备份维护事务日志备份链提供的冗余安全性。
注释
在某些情况下,还可以使用事务日志将数据库还原到特定的时间点。 有关详细信息,请将 SQL Server 数据库还原到时间点(完全恢复模式)。
相关任务
应用事务日志备份
还原至恢复点
SqlRestore (SMO)
通过使用 WITH NORECOVERY 来还原备份后恢复数据库