我遇到了一個數據庫的問題,它似乎是一個錯誤的值更新列。目前,我不知道哪個程序正在執行此操作。什麼是最好的方法來找出這個問題?事情真的能幫助我是在助人爲樂的順序:如何在SQL Server 2005中更新列時記錄日誌?
- 應用程序的名稱
- 執行應用
- 確切的SQL語句的主機。
事務日誌可以幫我嗎?我能否以某種方式編寫日誌記錄觸發器?
幫助將不勝感激。
我遇到了一個數據庫的問題,它似乎是一個錯誤的值更新列。目前,我不知道哪個程序正在執行此操作。什麼是最好的方法來找出這個問題?事情真的能幫助我是在助人爲樂的順序:如何在SQL Server 2005中更新列時記錄日誌?
事務日誌可以幫我嗎?我能否以某種方式編寫日誌記錄觸發器?
幫助將不勝感激。
,因爲它提供的連接打開時您可以創建一個觸發器和一張桌子,沿
CREATE TRIGGER TRG_foo_U On foo FOR UPDATE
AS
SET NOCOUNT ON
IF UPDATE(bar)
INSERT logtable
SELECT APP_NAME(), HOST_NAME(), SUSER_SNAME(), GETDATE(), * FROM INSERTED
GO
您可以嘗試使用SQL事件探查器查看針對數據庫進行的所有活動。
SQL事件探查器會給你這個信息,我相信你應該能夠應用一個過濾器,以便你需要捕獲該特定對象上的事件。
我試着添加一個過濾器到對象(是表名),但是這似乎沒有過濾任何東西。這是一個相當忙碌的生產服務器,所以通過手工發現違規聲明就像在大海撈針一樣。我在哪裏可以找到更多有關過濾 – Martijn 2010-11-03 13:24:55
當然得到正確的事件,並與正確的過濾器分析是棘手的。根據所選事件,您有興趣過濾的對象ID可能會或可能不會被事件知道。 http://support.microsoft.com/kb/303445 – 2010-11-04 12:52:31
SQL只知道一樣關於調用應用程序的行。如果連接字符串中沒有提供該信息(顯式或默認),則SQL中不會包含該信息。 – 2010-11-03 13:44:48