it-swarm.com.de

Wie rufe ich die Transaktionsaktivitäten / -protokolle für eine bestimmte Tabelle ab?

Ich kann die Transaktionsprotokolle mit fn_dblog Anzeigen, muss dies jedoch für eine bestimmte Tabelle tun. Wie kann ich das machen?

4
Celbis H.

Sie könnten Folgendes versuchen:

Rufen Sie das id für Ihre Benutzertabelle ab:

SELECT id, name FROM sys.sysobjects WHERE NAME = '<Your_Table_Name>'

z.B. 658101385

Rufen Sie die Transaktionsprotokollinformationen mit der undokumentierten Funktion ab:

SELECT * FROM ::fn_dblog(NULL,NULL) WHERE [Lock Information] LIKE '%658101385%'

Und dann weiter von dort.

Referenz: Identifizieren des Objektnamens für CREATE und ALTER mithilfe von fn_dblog ()

5

Warum nicht einfach nach dem Tabellennamen filtern?

select *
from fn_dblog(null, null)
where AllocUnitName = 'dbo.zzz'

Hier ist mein Repro, wenn ich eine Tabelle erstelle, 3 Zeilen einfüge und 1 Zeile lösche. Dann suche ich mit beiden Methoden im Protokoll nach dieser Tabelle. Ich habe nichts Wichtiges verpasst, direkt nach dem Tabellennamen zu filtern.

Die beiden Methoden erzeugen unterschiedliche Ergebnismengen:

  • "Nach Tabellenname filtern" übersieht alle LOP_LOCK_XACT - Operationen.
  • "Nach Sperrinfo filtern" übersieht alles, was Änderungen an der Seite IAM/PFS betrifft

(enter image description here

Ich könnte scheinen (z. B. beim Lesen von Identifizieren des Objektnamens für CREATE und ALTER mithilfe von fn_dblog () ), dass Sperrinformationen uns helfen können, den Tabellennamen bei der Erstellung zu identifizieren, aber das stimmt nicht: Der CREATE TABLE Zeile von fn_dblog() enthält überhaupt keine Sperrinformationen.

4
sepupic

Das Transaktionsprotokoll ist nicht für Menschen lesbar.

Abhängig von dem Grund hinter dem Wunsch, "dies für eine bestimmte Tabelle zu tun" (in der Frage nicht angegeben), könnten Sie versuchen, ein Tool eines Drittanbieters zu kaufen, anstatt es selbst zu versuchen.

0
user126897