Edw*_*ard 7 sql-server-2005 sql-server-2008-r2
我们使用的是 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
Run Code Online (Sandbox Code Playgroud)
SQL Server 不存储该信息。如果您有备份(包括事务日志文件),则可以通过恢复和搜索那些丢失的记录来查明删除发生的时间。
您只能找到已在其他地方记录的主机名/IP/程序。您的事件日志、SQL 日志或其他位置中可能存在有关一般活动的痕迹,但不会存储用于删除记录的特定日志(不要与事务日志记录混淆)。