2013-04-10 62 views
3

我正在使用SQL Server 2008 R2,試圖對一個不透明的應用程序進行逆向工程並重復其一些操作,以便我可以自動執行一些大規模的數據加載。如何跟蹤SQL Server中的數據庫寫入?

我覺得它應該很容易做 - 只需進入SQL Server Profiler,開始一個跟蹤,執行GUI操作,並查看跟蹤結果。我的問題是,過濾器沒有按照我的預期工作。尤其是,「寫入」列通常顯示爲「0」,即使是在明確更改數據庫的語句(如INSERT查詢)上也是如此。這使得我無法設置Writes >= 1篩選器,因爲我願意這樣做。

我已通過設置全包式跟蹤並運行應用程序來驗證這正是發生了什麼事情。我事先檢查了桌子,執行了操作,然後檢查了桌子,這肯定是對桌子進行了改變。我查看了跟蹤,沒有一行顯示「Writes」列中的任何非零數字,包括顯示INSERT查詢的行。查詢是沒有什麼特別的...只是像

exec sp_executesql 
    N'INSERT INTO my_table([a], [b], [c]) 
     values(@newA, @newB, @newC)', 
    N'@newA int,@newB int,@newC int', @newA=1, @newB=2, @newC=3 

(如果有上面的錯誤,這是我在這裏錯字 - 語句絕對是插入表中的記錄)

我m確保此行爲的關鍵在於「Writes」列的描述中:「由服務器代表事件執行的物理磁盤寫入數量」。也許服務器正在緩存寫入,並且它發生在Profiler的普通用途之外。我不知道,也許這不重要。

有沒有辦法可靠地找到並記錄所有更改數據庫的語句?

+2

你確定你的跟蹤配置正確嗎?您是在尋找開始通話而不是完整通話嗎?因爲它還沒有發生,你不會看到開始的東西。 – 2013-04-10 20:26:28

+0

你正在過濾哪些事件?是否可以在包含通配符搜索插入,更新和刪除的Textdata上執行通配符過濾器。但正如@ Love2Learn所說的,你當然一定要跟蹤RPC Completed和SQL Batch Completed,而不是開始。 – 2013-04-10 20:44:15

+0

我正在使用「標準(默認)」模板,其中包括'RPC:Completed'和'SQL:BatchCompleted'事件。 Textdata過濾器是否會捕獲存儲過程中所做的更改?我對此很感興趣。 – 2013-04-10 21:01:01

回答

0

您是否試過Server Side Trace?它也可以用來記錄讀取和寫入,如果我正確地讀取了你 - 你想要記錄寫入。

+0

這將報告與分析器完全相同。 – 2013-04-10 21:04:17

相關問題