2008-10-12 10 views
6

Ich bin daran interessiert, welche Methoden der Protokollierung in einer Oracle-Datenbank häufig ist. Unsere Methode ist die folgende:Wie logge ich mich in eine Oracle Datenbank ein?

Wir erstellen eine Protokolltabelle für die Tabelle, die protokolliert werden soll. Die Protokolltabelle enthält alle Spalten der Originaltabelle sowie einige spezielle Felder einschließlich Zeitstempel, Änderungsart (Einfügen, Aktualisieren, Löschen) und der ID des Modifizierers. Ein Trigger für die ursprüngliche Tabelle erstellt eine Protokollzeile für jedes Einfügen und Löschen und zwei Zeilen für eine Änderung. Protokollzeilen enthalten die Daten vor und nach der Änderung der ursprünglichen Daten.

Obwohl Zustand der Aufzeichnungen in der Zeit mit dieser Methode abgebaut zurück werden kann, es hat einige Nachteile:

  • Einführung einer neuen Spalte in der ursprünglichen Tabelle tut beinhaltet nicht automatisch Log-Modifikation.
  • Log-Änderung wirkt sich auf Log-Tabelle und Trigger und es ist einfach zu versauen.
  • Der Status eines Datensatzes zu einer bestimmten vergangenen Zeit kann nicht direkt bestimmt werden.
  • ...

Welche anderen Möglichkeiten gibt es? Mit welchen Werkzeugen kann dieses Problem gelöst werden?

Ich kenne nur log4plsql. Was sind die Vor- und Nachteile dieses Tools?

Edit: Basierend auf Brians Antwort habe ich folgende reference gefunden, die Standard-und feinkörnigen Auditing erläutert.

Antwort

10

Es klingt, als ob Sie nach "Auditing" sind. Oracle verfügt über eine integrierte Funktion namens Fine Grain Auditing (FGA). Kurz gesagt, Sie können alles oder bestimmte Bedingungen überprüfen. Was wirklich cool ist, ist, dass Sie sowohl Transaktionen als auch Transaktionen auswählen können. Einfacher Befehl, um mit der Überwachung zu beginnen:

Betrachten Sie es als 'Auslöser' für ausgewählte Anweisungen. Beispielsweise erstellen Sie Richtlinien:

begin 
    dbms_fga.add_policy (
     object_schema=>'BANK', 
     object_name=>'ACCOUNTS', 
     policy_name=>'ACCOUNTS_ACCESS' 
); 
end; 

Nachdem Sie die Richtlinie definiert haben, wenn ein Benutzer die Tabelle in der üblichen Weise abfragt, wie folgt:

select * from bank.accounts; 

die Audit-Trail-Aufzeichnungen diese Aktion. Sie können die Spur sehen durch Ausgabe:

select timestamp, 
    db_user, 
    os_user, 
    object_schema, 
    object_name, 
    sql_text 
from dba_fga_audit_trail; 

TIMESTAMP DB_USER OS_USER OBJECT_ OBJECT_N SQL_TEXT 
--------- ------- ------- ------- -------- ---------------------- 
22-OCT-08 BANK ananda BANK ACCOUNTS select * from accounts 
+0

das bringt Sie nicht vor und nach Werten tho. Es ist ziemlich begrenzt. Außer Ihnen SELECTS zu geben, die Sie nicht von benutzergesteuerten Tabellen bekommen können. –

+0

FGA wird Sie vor und nach Werten erhalten. Das ist die offensichtliche Verwendung von FGA. Ich machte den Punkt, dass FGA auch verwendet werden kann, um die Verwendung zu verfolgen. –

0

log4plsql ist eine ganz andere Sache, seine für die Protokollierung Debug-Informationen von PL/SQL

Für das, was Sie wollen, müssen Sie entweder.

  1. -Setup ein Auslöser
  2. Setup-PL/SQL-Schnittstelle um die Tische, CRUD-Operationen über diese Schnittstelle passieren, sorgt für die Schnittstelle den Protokolltabellen aktualisiert werden.
  3. Setup-Schnittstelle in Ihrer Anwendungsschicht, wie mit PL/SQL-Schnittstelle, nur höher.
  4. Oracle 11g enthält versionierte Tabellen, ich habe das überhaupt nicht benutzt, kann also keinen wirklichen Kommentar abgeben.
2

Nach Ihrer Beschreibung zu urteilen, frage ich mich, ob das, was Sie wirklich brauchen, nicht Protokollierungsmechanismus ist, sondern eher irgendeine Art von historischem Wert einer Tabelle. Wenn dies der Fall ist, sollten Sie besser eine Art von Temporal Database verwenden (mit den Feldern VALID_FROM und VALID_TO). Sie können Änderungen in der Datenbank mit Oracle LogMiner Tools verfolgen.

Wie für Ihre Szenarien, würde ich die Änderungen von Daten in dieser Art von Schema und nicht gespeichert:

+----------------------------------------------------------------------------+ 
| Column Name   | Function            | 
+----------------------------------------------------------------------------+ 
| Id     | PRIMARY_KEY value of the SOURCE table    | 
| TimeStamp   | Time stamp of the action        | 
| User    | User who make the action        | 
| ActionType   | INSERT, UPDATE, or DELETE       | 
| OldValues   | All fields value from source table, seperated by '|' | 
| Newvalues   | All fields value from source table, seperated by '|' | 
+----------------------------------------------------------------------------+ 

Mit dieser Art von Logging-Tabelle, können Sie leicht feststellen:

  • Historische Aktion ändern des bestimmten Datensatzes (unter Verwendung der ID)
  • Status des spezifischen Datensatzes in einem bestimmten Zeitpunkt

Natürlich kann diese Art der Protokollierung nicht alle gültigen Werte der Tabelle zu einem bestimmten Zeitpunkt bestimmen. Dazu müssen Sie Ihr Tabellendesign in Temporal Database Design ändern.

+0

Ich liebe dieses Design, weil ... Ich kann Ihnen alles erzählen, was gestern von einem Tisch geschah. Ich kann dir alles sagen, was user_X getan hat, aus einer Tabelle. Mit Spiegeltabellen müssten Sie eine ständig wachsende Liste von Tabellen aufrufen, um diese Fragen zu beantworten. –

+0

LogMiner scheint mir vielversprechend, aber es erfordert die Erstellung einer Mining-Datenbank, ein Wörterbuch und Redo-Logs, so dass eine Rekonfiguration des Systems notwendig ist. Ein Unterschied von logminer zu unserem Ansatz oben ist, dass es SQL-Anweisungen anstelle von Spaltenwerten anzeigt. – rics

+0

Das vorgeschlagene Schema ähnelt dem unseren, außer dass wir alte/neue Werte in separaten Zeilen speichern. Anyway Data Mining Möglichkeiten unterscheiden sich nicht. – rics

0

Wenn Sie nur daran interessiert zu wissen, was die Daten sahen aus wie in der jüngsten Vergangenheit Sie nur Oracles Rückblende Abfragefunktionalität nutzen könnten die Daten für eine bestimmte Zeit in der Vergangenheit abzufragen. Wie weit in der Vergangenheit ist abhängig davon, wie viel Speicherplatz Sie haben und wie viel Datenbankaktivität es gibt. Die helle Seite dieser Lösung ist, dass neue Spalten automatisch hinzugefügt werden. Der Nachteil ist, dass Sie nicht hinter ddl-Operationen abfragen können.

Verwandte Themen