将数据库还原到备份中的某个时间点

 本主题仅与使用完整恢复模式或大容量日志恢复模式的 SQL Server 数据库有关。

最好将数据库还原和恢复到故障点之前的某个特定时点、标记或日志序列号 (LSN)。例如,如果某事务错误更改了一些数据,则可能需要将该数据库还原到紧邻在不正确数据项之前的那个恢复点。为数据库指定恢复点的任何还原都称为“时点还原”。

下图显示了在时间 t9 处执行的到事务日志中间某个恢复点的还原。在时间 t10 处执行的此备份剩余部分以及后续日志备份中的更改将被丢弃。

还原到日志备份的中间点

使用下列方式之一指定目标恢复点:

  • 事务日志中的特定时点。

  • 以前插入事务日志记录中的命名标记。

  • 日志序列号 (LSN)。

注意注意

恢复到 LSN 是为工具供应商提供的专用功能,一般不广泛使用。

还原到指定时间或事务点始终是通过日志备份进行的,因此目标恢复点必须包含在事务日志备份中。若要将数据库还原到特定时间点或事务点,请在 STOPAT、STOPATMARK 或 STOPBEFOREMARK 子句中指定目标恢复点。在还原序列的每个 RESTORE LOG 语句中,必须在相同的 STOPAT、STOPATMARK 或 STOPBEFOREMARK 子句中指定目标时间或事务。应用包含恢复点的日志备份时,只能恢复该恢复点之前发生的事务。

作为时间点还原的先决条件,必须首先还原其端点早于目标恢复点的完整数据库备份。如果数据备份太临近指定的目标时间,而需帮助识别要还原哪个数据库备份,可以在 RESTORE DATABASE 语句中选择性地指定 WITH STOPAT、STOPATMARK 或 STOPBEFOREMARK 子句以引发错误。但是,会始终还原整个数据备份,即使其包含目标时间也同样如此。

注意注意

相应的日志备份必须与时点还原顺序开始时还原的完整数据库备份或部分备份位于同一恢复路径中。

恢复完成后,数据库的时间由主文件所恢复到的恢复点确定。后续还原(如果存在)的恢复点必须与该时间处的数据库一致。

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

注意注意

在大容量日志恢复模式下,如果日志备份包含大容量日志更改,则不能进行时点恢复,即不能恢复到该备份中的某个时点。必须将数据库恢复到事务日志备份的结尾。

本节涉及的主题