用過logexplorer的朋友都會被他強悍的功能吸引,我寫過一篇詳細的操作文件可以參考
我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路
1、首先要了解乙個沒有公開的系統函式::fn_dblog,他可以讀取sql日誌,並返回二進位制的行資料
2、然後要了解sql的二進位制資料是如何儲存的,這個可以參考我的blog文章
3、用自己擅長的開發工具來分析資料,得到我們需要的資訊
我用c#寫了乙個測試樣例,分析了int,char,datetime和varchar的日誌情況而且沒有考慮null和空字串的儲存,希望感興趣的朋友能和我一起交流打造屬於自己的日誌分析工具
詳細的試驗步驟以及**如下:
1、首先建立sqlserver的測試環境,我用的sql2005,這個過程不能保證在之前的版本中執行
以下sql語句會建立乙個dblogtest資料庫,並建立一張log_test表,然後插入3條資料之後把錶清空
usemaster
gocreatedatabasedblogtest
gousedblogtest
gocreatetablelog_test(idint,codechar(10),namevarchar(20),datedatetime,memovarchar(100))
insertintolog_testselect100,'id001','jinjazz',getdate(),'剪刀'
insertintolog_testselect65549,'id002','遊客',getdate()-1,'這傢伙很懶,沒有設定暱稱'
insertintolog_testselect-999,'id003','這傢伙來自火星',getdate()-1000,'a'
deletefromlog_test
--usemaster
--go
--dropdatabasedblogtest
2、我們最終的目的是要找到被我們刪掉的資料
3、分析日誌的c#**:我已經盡量詳細的寫了注釋
usingsystem;
usingsystem.collections.generic;
usingsystem.text;
;//迴圈讀取日誌
while(reader.read())
的操作:",reader["operation"],reader["allocunitname"]);
foreach(datacolumncincolumns)
=",c.name,c.value);
}console.writeline();
}catch
}reader.close();
}conn.close();
}console.writeline("************************日誌分析完成");
console.readline();
}//自定義的column結構
publicclassdatacolumn
publicdatacolumn(stringname,system.data.sqldbtypetype,shortlength)
}///
///sql二進位制結構翻譯,這個比較關鍵,測試環境為sql2005,其他版本沒有測過。
//////
///staticvoidtranslatedata(bytedata,datacolumncolumns)
}//跳過三個位元組
index+=3;
//取變長字段的數量,儲存兩個位元組
shortvarcolumncount=bitconverter.toint16(data,index);
index+=2;
//接下來,每兩個位元組儲存乙個變長字段的結束位置,
//所以第乙個變長字段的開始位置可以算出來
shortstartindex=(short)(index+varcolumncount*2);
//第乙個變長字段的結束位置也可以算出來
shortendindex=bitconverter.toint16(data,index);
//迴圈變長字段列表讀取資料
foreach(datacolumncincolumns)
}//獲取完畢}}
} 4、更改你的sql連線字串後執行以上**,會看到如下輸出資訊:
資料物件dbo.log_test的lop_insert_rows操作:
id=100
code=id001
name=jinjazz
date=2008-8-718:14:03
memo=剪刀
資料物件dbo.log_test的lop_insert_rows操作:
id=65549
code=id002
name=遊客
date=2008-8-618:14:03
memo=這傢伙很懶,沒有設定暱稱
資料物件dbo.log_test的lop_insert_rows操作:
id=-999
code=id003
name=這傢伙來自火星
date=2005-11-1118:14:03
memo=a
資料物件dbo.log_test的lop_delete_rows操作:
id=100
code=id001
name=jinjazz
date=2008-8-718:14:03
memo=剪刀
資料物件dbo.log_test的lop_delete_rows操作:
id=65549
code=id002
name=遊客
date=2008-8-618:14:03
memo=這傢伙很懶,沒有設定暱稱
資料物件dbo.log_test的lop_delete_rows操作:
id=-999
code=id003
name=這傢伙來自火星
date=2005-11-1118:14:03
memo=a
************************日誌分析完成
試驗成功~~
用c 讀取並分析sql2005日誌
我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路 1 首先要了解乙個沒有公開的系統函式 fn dblog,他可以讀取sql日誌,並返回二進位制的行資料 2 然後要了解sql的二進位制資料是如何儲存的,這個可以參考我的blog文章 3 用自己擅長的開發工具來分析資料,得到我們...
用c 讀取並分析sql2005日誌
我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路 1 首先要了解乙個沒有公開的系統函式 fn dblog,他可以讀取sql日誌,並返回二進位制的行資料 2 然後要了解sql的二進位制資料是如何儲存的,這個可以參考我的blog文章 3 用自己擅長的開發工具來分析資料,得到我們...
用c 讀取並分析sql2005日誌
用過logexplorer的朋友都會被他強悍的功能吸引,我寫過一篇詳細的操作文件可以參考 我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路 1 首先要了解乙個沒有公開的系統函式 fn dblog,他可以讀取sql日誌,並返回二進位制的行資料 3 用自己擅長的開發工具來分析資...