2012-01-03 56 views
0

我有這一定的條件下,相同的數據,如果執行這樣的聲明是在特定時間每天失去了一個數據庫表:從表中刪除*類別爲1刪除行日報

我想通過SQL腳本列出此表上的所有刪除操作,以瞭解記錄是如何精確刪除以及刪除的語句,用戶和時間。

有沒有人有這樣的腳本?還是有人有類似的情況下,可以建議?

快速響應將不勝感激。

SQL版本是Server 2008 Enterprise Edition。

謝謝。

回答

0

使用AFTER DELETE在表上觸發記錄用戶和執行時間的另一個表中的刪除操作。

使用一些高級技巧,你可以提取刪除行的查詢文本,但我不確定這是可能的內部觸發器。

觸發可能是這樣的

CREATE TABLE YourLogTable 
(
    ID int identity primary key, 
    Date datetime NOT NULL DEFAULT GETDATE(), 
    [User] nvarchar(128) NOT NULL DEFAULT suser_sname(), 
    [SqlText] NVARCHAR(MAX), 
    [any other interesting columns from deleted rows] 
) 
GO 

CREATE TRIGGER [[email protected]] 
ON YourTable 
AFTER DELETE 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @sqlText NVARCHAR(MAX) 

    SELECT @sqlText = txt.Text 
    FROM sys.dm_exec_connections c 
    CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) txt 
    WHERE session_id = @@SPID 

    INSERT YourLogTable([SqlText], [any other interesting columns from deleted rows]) 
    SELECT @SqlText, [any other interesting columns from deleted rows] 
    FROM DELETED 

END 
+0

你能引導我到觸發器腳本嗎? – 2012-01-03 08:09:47

+0

用腳本更新了答案 – 2012-01-03 08:15:29

+0

已更新,可查看當前查詢 – 2012-01-03 08:23:05

1

如果這只是一個短期的調試問題,要解決這個問題最簡單的方法可能是運行SQL Server Profiler中,使用過濾器設置爲捕獲數據,你'感興趣。沒有代碼改變這種方式。

爲獲得最佳性能,請嘗試在除數據庫服務器以外的計算機上運行SQL事件探查器(如果可以的話)。