用过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条数据之后把表清空
2、我们最终的目的是要找到被我们删掉的数据
3、分析日志的c#代码:我已经尽量详细的写了注释
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条数据之后把表清空
- use master
- go
- create database dbLogTest
- go
- use dbLogTest
- go
- create 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
2、我们最终的目的是要找到被我们删掉的数据
3、分析日志的c#代码:我已经尽量详细的写了注释
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace ConsoleApplication21
- {
- class Program
- {
- /// <summary>
- /// 分析sql2005日志,找回被delete的数据,引用请保留以下信息
- /// 作者:jinjazz (csdn的剪刀)
- /// 作者blog:http://blog.csdn.net/jinjazz
- /// </summary>
- /// <param name="args"></param>
- static void Main(string[] args)
- {
- using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection())
- {
- conn.ConnectionString = "server=localhost;uid=sa;pwd=sqlgis;database=dbLogTest";
- conn.Open();
- using (System.Data.SqlClient.SqlCommand command = conn.CreateCommand())
- {
- //察看dbo.log_test对象的sql日志