本主题仅适用于使用完整或大容量日志恢复模式的数据库。
可以使用日志序列号(LSN)来定义还原作的恢复点。 但是,这是一项专用功能,适用于工具供应商,不太可能一般有用。
日志序列号概述
在 RESTORE 序列期间内部使用 LSN 来跟踪数据还原到的时间点。 还原备份后,数据将还原到与备份创建时间点相对应的 LSN。 差异备份和日志备份将还原的数据库提前到较晚的时间,这对应于更高的 LSN。
事务日志中的每个记录都由日志序列号(LSN)唯一标识。 LSN 排序,以便如果 LSN2 大于 LSN1,则 LSN2 引用的日志记录所描述的更改发生在日志记录 LSN 描述的更改之后。
发生重大事件的日志记录的 LSN 可用于构造正确的还原序列。 由于 LSN 是有序的,因此可以比较相等和不相等(即,<、、>、=<=、>=)。 构造还原序列时,此类比较非常有用。
注释
LSN 是数据类型 numeric(25,0) 的值。 算术运算(例如加法或减法)没有意义,不得与 LSN 一起使用。
查看备份和还原中使用的 LSN
使用下列一个或多个记录查看给定备份和还原事件的日志记录的 LSN:
注释
LSN 也出现在一些消息文本中。
用于还原到 LSN 的 Transact-SQL 语法
通过使用 RESTORE 语句,可以在 LSN 之前或立即停止,如下所示:
使用 WITH STOPATMARK ='lsn:<lsn_number>' 子句,其中 lsn: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
相关任务
另请参阅
应用事务日志备份 (SQL Server)
事务日志 (SQL Server)
RESTORE (Transact-SQL)