如何还原到某个时间点 (Transact-SQL)
本主题说明如何还原到某个时间点。
还原到某个时间点
执行使用 NORECOVERY 选项的 RESTORE DATABASE 语句。
注意 如果部分还原顺序不包括任何 FILESTREAM 文件组,则不支持时点还原。可以强制该还原顺序以继续执行操作。但在 RESTORE 语句中省略的 FILESTREAM 文件组将永远无法还原。若要强制执行时点还原,请指定 CONTINUE_AFTER_ERROR 选项以及 STOPAT、STOPATMARK 或 STOPBEFOREMARK 选项,还必须在随后的 RESTORE LOG 语句中指定后面的三个选项。如果指定 CONTINUE_AFTER_ERROR,则部分还原顺序将成功,但 FILESTREAM 文件组将不可恢复。
执行 RESTORE LOG 语句以应用每个日志备份,同时指定:
应用事务日志的数据库的名称。
从其中还原事务日志备份的备份设备。
RECOVERY 和 STOPAT 选项。如果事务日志备份不包含要求的时间(例如,如果指定的时间超出了事务日志所包含的时间范围),则会生成警告,并且不会恢复数据库。
示例
下面的示例将数据库还原到它在 April 15, 2020 的 12:00 AM 的状态,并显示涉及多个日志备份的还原操作。在备份设备上,要还原的完整数据库备份 AdventureWorksBackups 是设备上的第三个备份集 (FILE = 3),第一个日志备份是第四个备份集 (FILE = 4),第二个日志备份是第五个备份集 (FILE = 5)。
重要提示 |
---|
AdventureWorks 数据库使用简单恢复模式。若要允许日志备份,请在完整备份数据库之前使用 ALTER DATABASE AdventureWorks SET RECOVERY FULL 将数据库设置为使用完整恢复模式。 |
RESTORE DATABASE AdventureWorks
FROM AdventureWorksBackups
WITH FILE=3, NORECOVERY;
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE LOG AdventureWorks
FROM AdventureWorksBackups
WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';
RESTORE DATABASE AdventureWorks WITH RECOVERY;
GO