首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

[攒分贴]用c#读取并分析sql2005日志解决思路

2012-01-24 
[攒分贴]用c#读取并分析sql2005日志sqlserver数据被误删,可以用LogExplorer恢复。用过他的朋友都会被他强悍

[攒分贴]用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和空字符串的保存,希望感兴趣的朋友能和我一起交流打造属于自己的日志分析工具。

我现在能够实现如下效果:

SQL code
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 


通过代码输出:

BatchFile code
# 数据对象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## ************************日志分析完成


代码和步骤比较长,参考我的blog文章

http://blog.csdn.net/jinjazz/archive/2008/08/07/2783909.aspx



[解决办法]
mark

热点排行