将数据库还原到备份中的某个时间点
本主题仅与使用完整恢复模式或大容量日志恢复模式的 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 文件组将不可恢复。
注意 |
---|
在大容量日志恢复模式下,如果日志备份包含大容量日志更改,则不能进行时点恢复,即不能恢复到该备份中的某个时点。必须将数据库恢复到事务日志备份的结尾。 |
本节涉及的主题
将数据库恢复到特定恢复点的最佳方法
列出一些将数据库还原到特定恢复点的最佳方法。恢复到特定时间点
包含有关如何执行下列操作的信息:通过仅恢复发生在事务日志备份中某个特定时点之前的事务(而不是整个备份)来恢复到某个时点。恢复到标记的事务
包含有关如何恢复到事务日志中以前插入的标记或恰好恢复到该标记前的时间点的信息。恢复到日志序列号 (LSN)
包含有关如何使用日志序列号 (LSN) 为还原操作定义恢复点的信息。