15

日志序列号是什么意思?我知道它是二进制类型,长 10 字节,它对应于事务在 DB 中发生的时间。但这是以某种有效的二进制格式存储的高精度日期时间值,还是日期时间和其他东西的函数(例如在同一毫秒发生的事务的序列号)。我做了很多搜索,但找不到一个好的答案。

任何人都可以用用于从日期时间或任何东西中导出 LSN 的公式或函数来解释。

4

4 回答 4

21

SQL Server 事务日志中的每条记录都由日志序列号 (LSN) 唯一标识。LSN 是这样排序的,如果 LSN2 大于 LSN1,则 LSN2 所引用的日志记录所描述的更改发生在日志记录 LSN 所描述的更改之后。

这里

您不应该关心这些是如何生成的。

于 2009-07-17T13:05:10.310 回答
5

它是一个递增序列(1,2,3,4,...),而不是日期时间值。从微软文档

日志序列号 (LSN) 值是一个由三部分组成的唯一递增值。它用于维护数据库中事务日志记录的顺序。这允许 SQL Server 维护 ACID 属性并执行适当的恢复操作。

于 2009-07-17T13:08:57.317 回答
4

首先,很抱歉回复死帖。我是在搜索其他基于 LSN 的操作时来到这个线程的。LSN 只不过是序列号,因为它指定 - 以三个十六进制部分生成的日志序列号,如00000016:0000003c:0001,这些部分如下:

  • 第一部分是 VLF:虚拟日志文件
  • 第二/中间部分是 OffSet :偏移到 VLF
  • 最后/第三部分是基于偏移量跟踪的日志/存储桶块内的插槽号

通常,任何数据库操作以及事务的开始/结束都会被存储,并且事务的每个操作,显然,开始和提交操作都会按顺序获得 LSN。这些与任何时间戳无关,但可以基于 sys 函数与时间戳映射。@max 已经回复了。

任何对事务的提交操作,强制切换到新的日志块和中间部分都会增加,否则最后一部分会根据 VLF 的大小增加。

于 2020-03-04T06:01:16.803 回答
1

无法保证派生它的方法,但您可以从msdb.dbo.backupset您进行备份的机器上猜到它:

SELECT  last_lsn
FROM    msdb.dbo.backupset
WHERE   backup_start_date = @backup_date

这当然不准确也不可靠。

于 2009-07-17T13:09:30.907 回答