基于SQL Server日志链查看数据库insert/update/delete操作(一)

在MSSQLServer2008下的语句 不同版本可能语句会有微小差别

 1 SELECT 
 2 [Slot ID], [Transaction ID], Operation,
 3 AllocUnitName,
 4 [Current LSN], 
 5 [Log record] ,
 6 [RowLog Contents 0],
 7 [RowLog Contents 1],
 8 [RowLog Contents 2],
 9 [RowLog Contents 3],
10 [RowLog Contents 4], 
11 [Log Record Fixed Length],
12 [Log Record Length], 
13 [Context],
14 AllocUnitId, 
15 [Page ID] 
16 FROM sys.fn_dblog(NULL,NULL)
17 WHERE AllocUnitName ='dbo.Table_2'
18 AND Context IN ('LCX_MARK_AS_GHOST', 'LCX_HEAP', 'LCX_CLUSTERED') 
19 AND Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS','LOP_MODIFY_ROW')
View Code

 

 

查询结果后 需要解析数据。解析数据需要对应表中的字段类型,所以要先知道表的具体结构(字段类型、长度等),根据字段类型匹配相应的value.

一般情况下会用到

[RowLog Contents 0],
[RowLog Contents 1],
[RowLog Contents 2]

三个字段的值,insert操作的数据会在[RowLog Contents 0]中,update操作会在[RowLog Contents 0],[RowLog Contents 1]中,delete操作的数据在[RowLog Contents 0]。

[RowLog Contents 2]会存储表的ID信息,整个所有的信息都会存储在[Log record]字段中。现在的问题是这些字段存储的是十六进制,需要解析,微软有一个存储格式的说明,后面的文章会把解析过程分享一下,目前正在积极的实现解析过程。

 

转载于:https://www.cnblogs.com/seer/p/4238009.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值