Sql-Server-2005
如何找出哪個主機/IP地址/程序執行了刪除?
我們使用的是 SQL Server 2005。在我們的數據庫中,一些行被刪除;如何找到系統(主機名/IP 地址)、程序以及刪除日期和時間?
事後您將無法找到此資訊。您需要添加觸發器和日誌記錄表(或設置昂貴的伺服器端跟踪,或將手動日誌記錄添加到您的數據訪問方法)。
這是一個關於如何實現日誌表和触發器的非常簡單的範例:
CREATE TABLE dbo.TableNameDeleteLog ( PK_From_TableName INT, Program NVARCHAR(128), Host NVARCHAR(128), IP VARCHAR(48), When DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); GO CREATE TRIGGER dbo.LogDelete_TableName ON dbo.TableName FOR DELETE AS BEGIN SET NOCOUNT ON; DECLARE @p NVARCHAR(128), @h NVARCHAR(128), @i VARCHAR(48); SELECT @p = s.host_name, @h = host_name, @i = c.client_net_address FROM sys.dm_exec_sessions AS s INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id WHERE s.session_id = @@SPID; INSERT dbo.TableNameDeleteLog(PK_From_TableName, Program, Host, IP) SELECT PK_Column, @p, @h, @i FROM deleted; END GO
SQL Server 不儲存該資訊。如果您有備份,包括事務日誌文件,您可以通過恢復和搜尋那些失去的記錄來查明刪除發生的時間。
您只能找到您在其他地方記錄的主機名/IP/程序。您的事件日誌、SQL 日誌或其他地方可能有關於一般活動的跟踪,但沒有儲存特定日誌(不要與事務日誌記錄混淆)用於記錄刪除。