日志序列号是什么意思?我知道它是二进制类型,长 10 字节,它对应于事务在 DB 中发生的时间。但这是以某种有效的二进制格式存储的高精度日期时间值,还是日期时间和其他东西的函数(例如在同一毫秒发生的事务的序列号)。我做了很多搜索,但找不到一个好的答案。
任何人都可以用用于从日期时间或任何东西中导出 LSN 的公式或函数来解释。
日志序列号是什么意思?我知道它是二进制类型,长 10 字节,它对应于事务在 DB 中发生的时间。但这是以某种有效的二进制格式存储的高精度日期时间值,还是日期时间和其他东西的函数(例如在同一毫秒发生的事务的序列号)。我做了很多搜索,但找不到一个好的答案。
任何人都可以用用于从日期时间或任何东西中导出 LSN 的公式或函数来解释。
SQL Server 事务日志中的每条记录都由日志序列号 (LSN) 唯一标识。LSN 是这样排序的,如果 LSN2 大于 LSN1,则 LSN2 所引用的日志记录所描述的更改发生在日志记录 LSN 所描述的更改之后。
从这里。
您不应该关心这些是如何生成的。
它是一个递增序列(1,2,3,4,...),而不是日期时间值。从微软文档:
日志序列号 (LSN) 值是一个由三部分组成的唯一递增值。它用于维护数据库中事务日志记录的顺序。这允许 SQL Server 维护 ACID 属性并执行适当的恢复操作。
首先,很抱歉回复死帖。我是在搜索其他基于 LSN 的操作时来到这个线程的。LSN 只不过是序列号,因为它指定 - 以三个十六进制部分生成的日志序列号,如00000016:0000003c:0001,这些部分如下:
通常,任何数据库操作以及事务的开始/结束都会被存储,并且事务的每个操作,显然,开始和提交操作都会按顺序获得 LSN。这些与任何时间戳无关,但可以基于 sys 函数与时间戳映射。@max 已经回复了。
任何对事务的提交操作,强制切换到新的日志块和中间部分都会增加,否则最后一部分会根据 VLF 的大小增加。
无法保证派生它的方法,但您可以从msdb.dbo.backupset
您进行备份的机器上猜到它:
SELECT last_lsn
FROM msdb.dbo.backupset
WHERE backup_start_date = @backup_date
这当然不准确也不可靠。