如何还原到某个时间点 (Transact-SQL)

本主题说明如何还原到某个时间点。

还原到某个时间点

  1. 执行使用 NORECOVERY 选项的 RESTORE DATABASE 语句。

    注意注意

    如果部分还原顺序不包括任何 FILESTREAM 文件组,则不支持时点还原。可以强制继续执行还原顺序。但在 RESTORE 语句中省略的 FILESTREAM 文件组将永远无法还原。若要强制执行时点还原,请指定 CONTINUE_AFTER_ERROR 选项以及 STOPAT、STOPATMARK 或 STOPBEFOREMARK 选项,还必须在随后的 RESTORE LOG 语句中指定后面的三个选项。如果指定 CONTINUE_AFTER_ERROR,则部分还原顺序将成功,但 FILESTREAM 文件组将不可恢复。

  2. 执行 RESTORE LOG 语句以应用每个日志备份,同时指定:

    • 应用事务日志的数据库的名称。

    • 从其中还原事务日志备份的备份设备。

    • RECOVERY 和 STOPAT 选项。如果事务日志备份不包含要求的时间(例如,如果指定的时间超出了事务日志所包含的时间范围),则会生成警告,并且不会恢复数据库。

示例

下面的示例将数据库还原到它在 April 15, 2020 的 12:00 AM 的状态,并显示涉及多个日志备份的还原操作。在备份设备上,要还原的完整数据库备份 AdventureWorks2008R2Backups 是设备上的第三个备份集 (FILE = 3),第一个日志备份是第四个备份集 (FILE = 4),第二个日志备份是第五个备份集 (FILE = 5)。

重要说明重要提示

AdventureWorks2008R2 数据库使用简单恢复模式。若要允许日志备份,请在完整备份数据库之前使用 ALTER DATABASE AdventureWorks2008R2 SET RECOVERY FULL 将数据库设置为使用完整恢复模式。

RESTORE DATABASE AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=3, NORECOVERY;

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorks2008R2Backups
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks2008R2 WITH RECOVERY; 
GO