当前位置:数据库 > SQLServer >>

c#读取并分析sql Server2005数据库日志

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

详细的试验步骤以及代码如下:

1、首先建立sqlserver的测试环境,我用的sql2005,这个过程不能保证在之前的版本中运行
以下sql语句会建立一个dbLogTest数据库,并建立一张log_test表,然后插入3条数据之后把表清空
 

  1. use master
  2. go
  3. create database dbLogTest
  4. go
  5. use  dbLogTest
  6. go
  7. create table log_test(id int ,code char(10),name varchar(20),date datetime,memo varchar(100))
  8. insert into log_test select 100, id001,jinjazz,getdate(),剪刀
  9. insert into log_test select 65549,id002,游客,getdate()-1,这家伙很懒,没有设置昵称
  10. insert into log_test select -999,id003,这家伙来自火星,getdate()-1000,a
  11.  
  12. delete from log_test
  13.  
  14. --use master 
  15. --go
  16. --drop database dbLogTest
  17.  


2、我们最终的目的是要找到被我们删掉的数据

3、分析日志的c#代码:我已经尽量详细的写了注释
 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace ConsoleApplication21
  6. {
  7.     class Program
  8.     {
  9.         /// <summary>
  10.         /// 分析sql2005日志,找回被delete的数据,引用请保留以下信息
  11.         /// 作者:jinjazz (csdn的剪刀)
  12.         /// 作者blog:http://blog.csdn.net/jinjazz
  13.         /// </summary>
  14.         /// <param name="args"></param>
  15.         static void Main(string[] args)
  16.         {
  17.             using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection())
  18.             {
  19.                 conn.ConnectionString = "server=localhost;uid=sa;pwd=sqlgis;database=dbLogTest";
  20.                 conn.Open();
  21.                 using (System.Data.SqlClient.SqlCommand command = conn.CreateCommand())
  22.                 {
  23.                     //察看dbo.log_test对象的sql日志
  24.                     command.CommandText = @"SELECT allocunitname,operation,[RowLog Contents 0] as r0,[RowLog Contents 1]as r1 
  25.                                 from::fn_dblog (null补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,