Antworten:
Sie können diese Informationen nachträglich nicht finden. Sie müssen einen Trigger und eine Protokollierungstabelle hinzufügen (oder eine teure serverseitige Ablaufverfolgung einrichten oder Ihre Datenzugriffsmethoden manuell protokollieren).
Hier ist ein sehr schnelles Beispiel für die Implementierung einer Protokollierungstabelle und eines Triggers:
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 speichert diese Informationen nicht. Wenn Sie über eine Sicherung verfügen, einschließlich Transaktionsprotokolldateien, können Sie möglicherweise den Zeitpunkt des Löschens genau bestimmen, indem Sie diese fehlenden Datensätze wiederherstellen und nach ihnen suchen.
Sie können den Hostnamen / die IP / das Programm nur finden, wenn Sie dies an anderer Stelle angemeldet haben. Möglicherweise enthält Ihr Ereignisprotokoll, Ihr SQL-Protokoll oder andere Stellen Spuren der Aktivität im Allgemeinen, es werden jedoch keine spezifischen Protokolle (nicht zu verwechseln mit Transaktionsprotokolldatensätzen) zum Löschen von Datensätzen gespeichert.