恢复到日志序列号 (SQL Server)
本主题仅与使用完整恢复模式或大容量日志恢复模式的数据库相关。
您可以使用日志序列号 (LSN) 定义还原操作的恢复点。 但是,这是为工具供应商提供的专用功能,不太可能广泛使用。
日志序列号的概述
RESTORE 顺序期间,在内部使用 LSN 跟踪数据还原到的时间点。 还原备份后,数据被还原到与进行备份的时间点相对应的 LSN。 差异和日志备份将还原的数据库推到稍后的时间,该时间与一个更高的 LSN 相对应。
事务日志中的每个记录都由一个日志序列号 (LSN) 唯一标识。 LSN 是这样排序的:如果 LSN2 大于 LSN1,则 LSN2 所标识的日志记录描述的更改发生在日志记录 LSN1 描述的更改之后。
发生重大事件的日志记录的 LSN 对于构造正确的还原顺序可能很有用。 因为 LSN 是有顺序的,所以可以比较它们是否相等(即 <、>、=、<=、>=)。 构造还原顺序时,这种比较很有用。
注意 |
---|
LSN 是数据类型为 numeric 的值 (25,0)。 算术运算(例如加法或减法)对 LSN 没有任何意义,请不要与 LSN 一起使用。 |
[返回页首]
查看备份和还原使用的 LSN
使用下列一种或几种方法可以查看发生给定备份和还原事件的日志记录的 LSN:
注意 |
---|
LSN 还显示在某些消息正文中。 |
还原到 LSN 的 Transact-SQL 语法
通过使用 RESTORE 语句,可以在 LSN 处或刚好在 LSN 之前停止,如下所示:
使用 WITH STOPATMARK = 'lsn:<lsn_number>' 子句,其中 lsn:<lsnNumber> 是一个字符串,它指出包含指定 LSN 的日志记录是恢复点。
STOPATMARK 前滚到 LSN,并且前滚中包括该日志记录。
使用 WITH STOPBEFOREMARK = 'lsn:<lsn_number>' 子句,其中 lsn:<lsnNumber> 是一个字符串,它指出位于包含指定 LSN 的日志记录之前的日志记录是恢复点。
STOPBEFOREMARK 前滚到 LSN,并从前滚中排除该日志记录。
通常会选择要包括或排除的特定事务。 虽然实践中并不总是如此,但指定的日志记录就是事务提交记录。
示例
以下示例假定 AdventureWorks 数据库已更改为使用完整恢复模式。
RESTORE LOG AdventureWorks FROM DISK = 'c:\adventureworks_log.bak'
WITH STOPATMARK = 'lsn:15000000040000037'
GO