用過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條數據之後把表清空
- 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日志
- command.CommandText = @"SELECT allocunitname,operation,[RowLog Contents 0] as r0,[RowLog Contents 1]as r1
- from::fn_dblog (null