2016-06-29 13 views
-1

Ich habe Programm, das Benutzer nimmt und Informationen über ihn/sie in fünf Tabellen aktualisiert. Der Prozess ist ziemlich anspruchsvoll, da viele Schritte (Seiten) erforderlich sind. Ich habe Logs, Sysout und Syserr-Anweisungen, die mir helfen, SQL-Abfragen in der IDE-Konsole zu finden, aber es gibt nicht alle von ihnen. Ich habe bereits viele Tage damit verbracht, andere fehlende Abfragen durch Debugging zu erfassen, aber bisher kein Glück. Der Grund, warum ich das tue, ist, weil ich Benutzerinformationsaktualisierungen automatisieren möchte, also muss ich nicht jede Seite durchgehen, die Benutzerdetails manuell eingibt.Wie Verfolgen von Änderungen für bestimmte Datenbanktabellen?

Ich frage mich, ob ich etwas Technik haben könnte, die mir Datenbanktabellenänderungen zeigt, wie ich bereits Tabellennamen kenne, durch Änderungen meine ich, ob es update oder insert Anweisungen war und was genau geändert (Spaltenname und Wert eingefügt/aktualisiert). Jeder Rat wird sehr geschätzt. Ich habe IBM RAD und DB2-Datenbank. Vielen Dank.

+0

Ich meine, eine SQL-Trace würde Sie nah dran bringen. – Adam

+1

Welche DB2 Version/Plattform? – mustaccio

+0

Unterstützt DB2 nicht die Verwendung von Triggern? Abgesehen von massiv geladenen Umgebungen - wie BI - wäre ein Trigger mein bevorzugtes Werkzeug, um Änderungen in einer SQL DB zu verfolgen. – Tyron78

Antwort

0

In DB2 können Sie grundlegende Auditing-Informationen verfolgen.

DB2 kann verfolgen, welche Daten geändert wurden, wer die Daten geändert hat und die SQL-Operation, mit der die Daten geändert wurden.

Um nachzuverfolgen, wann Daten geändert wurden, definieren Sie Ihre Tabelle als temporale Tabelle für Systemzeitraum. Die Spalten row-Beginn und row-end in der zugehörigen Protokolltabelle enthalten Informationen darüber, wann Datenänderungen aufgetreten sind.

Um zu verfolgen, wer und was SQL die Daten geändert hat, können Sie nicht-deterministisch generierte Ausdruckspalten verwenden. Diese Spalten können Werte enthalten, die für Überwachungszwecke hilfreich sind, z. B. der Wert des speziellen CURRENT SQLID-Registers zum Zeitpunkt der Datenänderung. Mögliche Werte für nicht-deterministisch generierte Ausdrucksspalten sind in der Syntax für die Anweisungen CREATE TABLE und ALTER TABLE definiert.

Zum Beispiel

CREATE TABLE TempTable (balance INT, 
       userId VARCHAR(100) GENERATED ALWAYS AS (SESSION_USER) , 
       opCode CHAR(1) 
          GENERATED ALWAYS AS (DATA CHANGE OPERATION) 
       ... SYSTEM PERIOD (SYS_START, SYS_END)); 

Die userId Spalte speichert, die die Daten modifiziert. Diese Spalte ist als eine nicht deterministisch generierte Ausdrucksspalte definiert, die den Wert des Sonderregisters SESSION_USER enthält.

Die Spalte opCode speichert die SQL-Operation, die die Daten geändert hat. Diese Spalte ist als eine nicht deterministisch generierte Ausdrucksspalte definiert und speichert einen Wert, der den Typ der SQL-Operation angibt.

Angenommen, Sie dann die folgenden Anweisungen verwenden, um eine Verlaufstabelle für TempTable zu erstellen und diese Geschichte Tabelle mit TempTable zu assoziieren:

CREATE TABLE TempTable_HISTORY (balance INT, user_id VARCHAR(128) , op_code CHAR(1) ...); 

ALTER TABLE TempTable ADD VERSIONING 
       USE HISTORY TABLE TempTable_HISTORY  ON DELETE ADD EXTRA ROW; 
0

SQL-Anweisungen für eine begrenzte Anzahl von Tabellen und eine begrenzte Zeit Capturing - wie Soweit ich Ihr Problem verstanden habe - könnte dies mit der DB2-Audit-Einrichtung gelöst werden.

create audit policy tabsql categories execute status both error type normal 

audit <tabname> using policy tabsql 

Sie müssen SECADM Rechte in ihrer Datenbank haben und der zweite Befehl wird den Audit-Prozess starten. Sie können es mit

audit <tabname> remove policy 

Prüfstopp aus der

db2audit

Befehlswege zu konfigurieren und die Daten aus der Audit-Datei in eine getrennte Datei zu extrahieren, die dann wieder geladen werden konnte in die Datenbank. Die erforderlichen Tabellen können mit dem bereitgestellten Skript sqllib/misc/db2audit.ddl erstellt werden. Sie benötigen die Abfrage die Tabelle EXECUTE für Ihre SQL-Details

Bitte beachten Sie, dass Audit kann große Mengen von Daten erfassen, so stellen Sie sicher, es wieder auszuschalten, nachdem Sie die notwendigen Informationen zu cachen.

Verwandte Themen