恢复到日志序列号(SQL Server)

本主题仅适用于使用完整或大容量日志恢复模式的数据库。

可以使用日志序列号(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)