Zeigen Sie Löschanweisungen im Transaktionsprotokoll an

Antworten:

11

Sie werden nicht die genauen Skripte finden, die in SQL ausgeführt wurden. (im Transaktionslog)

Ein Transaktionsprotokoll ist eine Datei, die Informationen zu jeder an der Datenbank vorgenommenen Änderung enthält. Dies umfasst Datenänderungen (Transaktionen), Datenbankänderungen und Sicherungs- / Wiederherstellungsereignisse.

Der Hauptzweck des Transaktionsprotokolls besteht darin, eine Methode bereitzustellen, mit der eine Datenbank bei Bedarf zu einem bestimmten Zeitpunkt wiederhergestellt werden kann. Dies kann das Zurücksetzen von Transaktionen auf einen bestimmten Zeitpunkt oder das Zurücksetzen von Transaktionen von einer vollständigen Sicherungswiederherstellung umfassen.

Weitere Informationen zum Transaktionsprotokoll finden Sie unter http://www.sqlservercentral.com/articles/Design+and+Theory/63350/.

Hier ist ein Skript, das Ihnen die zuletzt durchgeführten Löschabfragen anzeigt

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
where dest.TEXT like '%Delete%from%'
ORDER BY deqs.last_execution_time DESC
AmmarR
quelle
FYI: FROMist ein optionales Schlüsselwort in einer DELETEAnweisung, daher würde ich es hier nicht in das passende Prädikat aufnehmen.
Jon Seigel
Richtig, die From in delete-Anweisung ist optional. Sie wurde beibehalten, um die Ergebnisse meiner Abfrage einzuschränken. aber ja, du hast recht
AmmarR
Beachten Sie, dass bei SQL Server-Instanzen, bei denen die Groß- und Kleinschreibung beachtet wird, der obige Code deleteu DELETE. Ä. Fehlt. Möglicherweise möchten Sie die where-Klausel zwischen Groß- und Kleinschreibung unterscheiden. Beispiel: WHERE dest.text LIKE '%DELETE %' COLLATE Latin1_General_CI_AS
Max Vernon,
11

Sie können die einzelnen gelöschten Zeilen anzeigen, indem Sie nach LOP_DELETE_ROWS-Vorgängen suchen, die sich noch im Protokoll befinden:

select * from fn_dblog(NULL, NULL) 
where Operation = 'LOP_DELETE_ROWS'

Wenn das Protokoll wiederverwendet wurde (im einfachen Wiederherstellungsmodell) oder durch Sicherung abgeschnitten wurde (im vollständigen Wiederherstellungsmodell oder Massenwiederherstellungsmodell), können Sie nur die Protokollvorgänge anzeigen, die im Protokoll noch verfügbar sind.

Das Verständnis der Protokollvorgänge ist recht komplex. Sie müssen sich mit Dingen wie Rückgängigmachen oder Kompensieren von Vorgängen vertraut machen, um einen Sinn für einige auftretende Protokollmuster zu erhalten. Unkomplizierte festgeschriebene Löschvorgänge sind jedoch recht einfach zu verstehen.

Remus Rusanu
quelle