用c 讀取並分析sql2005日誌

2021-06-07 09:36:16 字數 3520 閱讀 1343

我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路

1、首先要了解乙個沒有公開的系統函式::fn_dblog,他可以讀取sql日誌,並返回二進位制的行資料

2、然後要了解sql的二進位制資料是如何儲存的,這個可以參考我的blog文章

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#**:我已經盡量詳細的寫了注釋

13.        ///

14.        ///

15.        static void main(string args)

16.        ;

39.                    //迴圈讀取日誌

40.                    while (reader.read())

41.                    的操作:", reader["operation"], reader["allocunitname"]);

49.                            foreach (datacolumn c in columns)

50.                            = ", c.name, c.value);

52.                            }

53.                            console.writeline();

54.                        }

55.                        catch

56.                       

59.                       

60.                    }

61.                    reader.close();

62.                }

63.                conn.close();

64.            }

65.            console.writeline("************************日誌分析完成");

66.            console.readline();

67.        }

68.        //自定義的column結構

69.        public class datacolumn

70.       

80.            public datacolumn(string name,system.data.sqldbtype type,short length)

81.           

86.        }

87.        ///

88.        /// sql二進位制結構翻譯,這個比較關鍵,測試環境為sql2005,其他版本沒有測過。

89.        ///

90.        ///

91.        ///

1.資料物件dbo.log_test的lop_insert_rows操作:

2.id = 100

3.code = id001

4.name = jinjazz

5.date = 2008-8-7 18:14:03

6.memo = 剪刀

7.8.資料物件dbo.log_test的lop_insert_rows操作:

9.id = 65549

10.code = id002

11.name = 遊客

12.date = 2008-8-6 18:14:03

13.memo = 這傢伙很懶,沒有設定暱稱

14.15.資料物件dbo.log_test的lop_insert_rows操作:

16.id = -999

17.code = id003

18.name = 這傢伙來自火星

19.date = 2005-11-11 18:14:03

20.memo = a

21.22.資料物件dbo.log_test的lop_delete_rows操作:

23.id = 100

24.code = id001

25.name = jinjazz

26.date = 2008-8-7 18:14:03

27.memo = 剪刀

28.29.資料物件dbo.log_test的lop_delete_rows操作:

30.id = 65549

31.code = id002

32.name = 遊客

33.date = 2008-8-6 18:14:03

34.memo = 這傢伙很懶,沒有設定暱稱

35.36.資料物件dbo.log_test的lop_delete_rows操作:

37.id = -999

38.code = id003

39.name = 這傢伙來自火星

40.date = 2005-11-11 18:14:03

41.memo = a

42.43.************************日誌分析完成

44.試驗成功~~

用c 讀取並分析sql2005日誌

我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路 1 首先要了解乙個沒有公開的系統函式 fn dblog,他可以讀取sql日誌,並返回二進位制的行資料 2 然後要了解sql的二進位制資料是如何儲存的,這個可以參考我的blog文章 3 用自己擅長的開發工具來分析資料,得到我們...

用c 讀取並分析sql2005日誌

用過logexplorer的朋友都會被他強悍的功能吸引,我寫過一篇詳細的操作文件可以參考 我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路 1 首先要了解乙個沒有公開的系統函式 fn dblog,他可以讀取sql日誌,並返回二進位制的行資料 3 用自己擅長的開發工具來分析資...

用c 讀取並分析sql2005日誌

用過logexplorer的朋友都會被他強悍的功能吸引,我寫過一篇詳細的操作文件可以參考 我們可以自己用開發工具來實現sql日誌的讀取,這個應用還是很酷的,具體思路 1 首先要了解乙個沒有公開的系統函式 fn dblog,他可以讀取sql日誌,並返回二進位制的行資料 3 用自己擅長的開發工具來分析資...