[攒分贴]用c#读取并分析sql2005日志
sqlserver数据被误删,可以用LogExplorer恢复。
用过他的朋友都会被他强悍的功能吸引,我写过一篇详细的操作文档可以参考
http://blog.csdn.net/jinjazz/archive/2008/05/19/2459692.aspx
我们可以自己用开发工具来实现sql日志的读取,这个应用还是很酷的,具体思路
1、首先要了解一个没有公开的系统函数::fn_dblog,他可以读取sql日志,并返回二进制的行数据
2、然后要了解sql的二进制数据是如何存储的,这个可以参考我的blog文章
http://blog.csdn.net/jinjazz/archive/2008/08/07/2783872.aspx
3、用自己擅长的开发工具来分析数据,得到我们需要的信息
我用c#写了一个测试样例,分析了int,char,datetime和varchar的日志情况而且没有考虑null和空字符串的保存,希望感兴趣的朋友能和我一起交流打造属于自己的日志分析工具。
我现在能够实现如下效果:
use mastergocreate database dbLogTestgouse dbLogTestgocreate table log_test(id int ,code char(10),name varchar(20),date datetime,memo varchar(100))insert into log_test select 100, 'id001','jinjazz',getdate(),'剪刀'insert into log_test select 65549,'id002','游客',getdate()-1,'这家伙很懒,没有设置昵称'insert into log_test select -999,'id003','这家伙来自火星',getdate()-1000,'a'delete from log_test--use master --go--drop database dbLogTest
# 数据对象dbo.log_test的LOP_INSERT_ROWS操作:# id = 100# code = id001# name = jinjazz# date = 2008-8-7 18:14:03# memo = 剪刀## 数据对象dbo.log_test的LOP_INSERT_ROWS操作:# id = 65549# code = id002# name = 游客# date = 2008-8-6 18:14:03# memo = 这家伙很懒,没有设置昵称## 数据对象dbo.log_test的LOP_INSERT_ROWS操作:# id = -999# code = id003# name = 这家伙来自火星# date = 2005-11-11 18:14:03# memo = a## 数据对象dbo.log_test的LOP_DELETE_ROWS操作:# id = 100# code = id001# name = jinjazz# date = 2008-8-7 18:14:03# memo = 剪刀## 数据对象dbo.log_test的LOP_DELETE_ROWS操作:# id = 65549# code = id002# name = 游客# date = 2008-8-6 18:14:03# memo = 这家伙很懒,没有设置昵称## 数据对象dbo.log_test的LOP_DELETE_ROWS操作:# id = -999# code = id003# name = 这家伙来自火星# date = 2005-11-11 18:14:03# memo = a## ************************日志分析完成