我正在阅读关于 tlog 的 Remus Rusanu 文章。在那篇文章中,他演示了如何使用 dbcc 页面选项读取日志有效负载。我的问题是,有没有办法从 sql 或 c# 读取 fn_dblog(null,null) 的日志记录输出。 PFB 屏幕截图了解更多详情。
我正在阅读关于 tlog 的 Remus Rusanu 文章。在那篇文章中,他演示了如何使用 dbcc 页面选项读取日志有效负载。我的问题是,有没有办法从 sql 或 c# 读取 fn_dblog(null,null) 的日志记录输出。 PFB 屏幕截图了解更多详情。
Microsoft 不支持使用 fn_dblog 读取事务日志。所以你应该避免在生产服务器上运行这个命令。您可以在 UAT/Test 环境中运行它。
你到底想从 fn_dblog 的输出中读取什么,你能准确地说。您可以从 fn_dblog 的输出中获得大量信息。阅读输出并不容易,需要一定程度的专业知识才能阅读。
我会给你一个Demo。
--然后使用下面的查询过滤掉与交易相关的记录
你可以跑
查看 fn_dblog 将产生的所有列名
示例:我将显示触发简单更新命令时记录的所有内容
它有一行用于开始传输,一行用于提交,一行用于更新操作。您可以看到 LOP_BEGIN_XACT 表示事务的开始和 COMMIT 表示事务的提交。
LOP_MODIFY_ROW 表示一行被修改,就像我们在更新语句中所做的那样。
LCK_Clustered 索引在图片中,因为表具有 CI 并且行必须已被排他锁定以进行更新
然后是十六进制页面 ID,它实际上说明了哪个页面有被修改的行
然后最后一列包括锁信息。被占用的锁
HoBt 72057594041860096:ACQUIRE_LOCK_IX 对象: 8:613577224:0 ;ACQUIRE_LOCK_IX PAGE: 8:1:344 ;ACQUIRE_LOCK_X KEY: 8:72057594041860096 (8194443284a0)
数据库 ID=8 文件编号 1 和第 334 页。您还会看到 KEY 值
每个事务和列日志记录长度还有一个日志序列号,它将告诉您特定操作的 LSN 和日志记录的大小
这只是一点信息。事务日志的内容太多了,很难在这里全部写下来。但我可以向您推荐 Paul Randal 的各种博客,在那里您可以找到他写的关于如何借助 fn_dblog 的输出来获取各种信息的文章。
带有事务日志的时间传递
再次深入了解事务日志
阅读 Paul 的各种文章,你会学到很多关于事务日志的内容
使用事务日志跟踪页面拆分
如何判断谁更改了日志文件特征
使用 fn_dblog、fn_dump_dblog 和使用 LSN 恢复 STOPBEFOREMARK