我有這一定的條件下,相同的數據,如果執行這樣的聲明是在特定時間每天失去了一個數據庫表:從表中刪除*類別爲1刪除行日報
我想通過SQL腳本列出此表上的所有刪除操作,以瞭解記錄是如何精確刪除以及刪除的語句,用戶和時間。
有沒有人有這樣的腳本?還是有人有類似的情況下,可以建議?
快速響應將不勝感激。
SQL版本是Server 2008 Enterprise Edition。
謝謝。
我有這一定的條件下,相同的數據,如果執行這樣的聲明是在特定時間每天失去了一個數據庫表:從表中刪除*類別爲1刪除行日報
我想通過SQL腳本列出此表上的所有刪除操作,以瞭解記錄是如何精確刪除以及刪除的語句,用戶和時間。
有沒有人有這樣的腳本?還是有人有類似的情況下,可以建議?
快速響應將不勝感激。
SQL版本是Server 2008 Enterprise Edition。
謝謝。
使用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
如果這只是一個短期的調試問題,要解決這個問題最簡單的方法可能是運行SQL Server Profiler中,使用過濾器設置爲捕獲數據,你'感興趣。沒有代碼改變這種方式。
爲獲得最佳性能,請嘗試在除數據庫服務器以外的計算機上運行SQL事件探查器(如果可以的話)。
你能引導我到觸發器腳本嗎? – 2012-01-03 08:09:47
用腳本更新了答案 – 2012-01-03 08:15:29
已更新,可查看當前查詢 – 2012-01-03 08:23:05