Trigger erstellen, um SQL zu protokollieren, das die Tabelle beeinflusst hat?

8

Ich versuche herauszufinden, was den Wert einer Spalte aktualisiert, und ich habe sehr wenig Ahnung von der Anwendung. Auf den ersten Blick habe ich bemerkt, dass etwa 90% der Anwendungen in der Datenbank mit Geschäftslogik abgewickelt werden. Unnötig zu sagen, dass die Tiefe der SPs, Funktionen und Trigger verrückt ist.

Ich möchte einen Trigger für die fragliche Tabelle erstellen, der das SQL protokolliert, das die Tabelle beeinflusst hat. Welche SQL könnte verwendet werden, um das ausgeführte SQL im Kontext der aktualisierten Tabelle abzurufen?

Details: MS SQL Server 2008

Danke !!

    
used2could 22.06.2010, 15:43
quelle

5 Antworten

5

Meine Lösung

Ich habe einen Trigger für die fragliche Tabelle hinzugefügt, der Informationen protokollierte, die ich über Zeitstempel von sys.dm_exec_sql_text AND sys.dm_exec_query_stats eingegrenzt hatte. Das hat schnell das erreicht, wonach ich gesucht habe. Es stellte sich heraus, dass es einige Auslöser gab, von denen ich nicht wusste, dass sie Daten nach einem UPDATE aktualisieren.

%Vor%     
used2could 22.06.2010, 18:37
quelle
8

Neben Triggern, die bei einer Datenänderung ausgelöst werden, können Sie SQL Server-Traces verwenden und diese in SQL Profiler oder einem Auditing-Tool eines Drittanbieters analysieren, das ausgeführten Code für DML-Änderungen verfolgt.

Mit ApexSQL Comply können Sie die Überwachung nur auf das spezifische Datenbankobjekt (in diesem Fall Tabelle) und das Ereignis eingrenzen Geben Sie ein.

Die Berichte zeigen verschiedene nützliche Informationen, einschließlich der ausgeführten SQL-Anweisung, die die Änderung ausgelöst hat.

Haftungsausschluss: Ich arbeite für ApexSQL als Support-Ingenieur

    
Milena Petrovic 21.06.2014 15:25
quelle
7

Ich weiß, dass dieses Problem bereits gelöst wurde, aber ich war daran interessiert, wie es mit erweiterten SQL Server 2008-Ereignissen gelöst werden könnte. Dies ist mein erstes Spiel mit XEvents, also bin ich mir sicher, dass es noch viel zu verbessern gibt!

Skript zum Einrichten der Test-Datenbank

%Vor%

Also ist das Szenario, dass TableWithMysteryUpdate aktualisiert wird, aber ich bin mir nicht sicher, was. Ich werde einen Update-Trigger hinzufügen, der nichts tut, um nach diesem Objekt filtern zu können.

%Vor%

Führen Sie anschließend das Skript aus, um die XEvents-Sitzung zu erstellen, führen Sie die Prozedur aus, die den Aufruf-Stack schließlich zum Abschluss bringt, und beenden Sie dann die Sitzung.

%Vor%

Die Trace-Daten können mit

gelesen werden %Vor%

Der Aufrufstapel ist

%Vor%

Beitritt zu den DMVs

%Vor%

gibt Ergebnisse (zeigt den gesamten Tsql Call Stack)

    
Martin Smith 30.06.2010 13:32
quelle
3

Bitte stimme für dieses Microsoft Connect-Element , und sehen Sie sich Diese Problemumgehung .

    
Cade Roux 22.06.2010 16:17
quelle
2

SQL Server 2008 führte eine neue Funktion mit dem Namen Change Data Capture (CDC) ein, anstatt Trigger zu verwenden. Lesen Sie hier mehr darüber .

>     
OMG Ponies 22.06.2010 15:55
quelle