Zu Oracle

Bereich:
Versionsinfo:
DBA
9.2, 10.2, 11.2
Erstellung:
Letzte Überarbeitung:
01/2004 MP
06/2009 MP
 Als PDF Downloaden!

LogMiner

Es kommt des öfteren vor, dass Benutzer aus Versehen falsche oder zu viele Datensätze löschen, Einträge mit einem falschen Wert updaten oder den verkehrten Index löschen.

Wenn Sie nun im Besitz eines aktuellen logischen Backups (Export) sind, dann könnten Sie diese Fehler möglicherweise beheben.
Wenn nicht, hat man eigentlich nur die Möglichkeit eines unvollständigen Recoveries. Aber es gibt da noch eine 3. Möglichkeit:
Den LogMiner.

Der Oracle LogMiner ist ein Package (DBMS_LOGMNR), mit dem Sie den Inhalt von RedoLog-Dateien abfragen und analysieren können. Die Ergebnisse werden in einer View (v$LOGMNR_CONTENTS) dargestellt und können mittels SQL-Befehlen betrachtet werden.

Mit Hilfe des LogMiners können Sie unter anderem folgende Informationen aus den RedoLog-Dateien sichtbar machen:

  • Jegliche DML- (Insert, Update, Delete) oder DDL-Befehle (Create ... )(als Sonderoption) in Form von Undo- und Redo-Statements
  • Die System Change Number (SCN)
  • Der Benutzer, der das Statement abgesetzt hat
  • Der Name und das Schema des geänderten Objekts (Tabellenname)

In den RedoLog Dateien werden die einzelnen Tabellenname, Spaltenname, Objektnamen unter einer internen Object-ID und  die Spalten- oder Vergleichswerte in Hexadezimal-Code gespeichert. Damit der LogMiner diese Informationen auch vollständig übersetzten kann, benötigt er den Zugriff auf das Dictionary. Dies kann man durch folgende Möglichkeiten bewerkstelligen:

  • Data Dictionary-Extract in eine Datei
  • Data Dictionary-Extract in die RedoLog-Datei(en)
  • Das Dictionary der aktuellen Datenbank verwenden


Im folgenden werden wir nur die 1. Möglichkeit ( Dictionary in einem Flat-File) verfolgen ...

 
Anwendung des LogMiners

Zum Analysieren der RedoLog-Dateien mit Hilfe des LogMiners müssen Sie folgendermaßen vorgehen:

   1. Dictionary erstellen
   2. Die zu analysierenden RedoLog-Dateien auswählen und registrieren
   3. Die Analyse starten
   4. Das Ergebnis über die View V$LOGMNR_CONTENTS abfragen
   5. Die LogMiner-Session beenden

Dictionary erstellen (Extrahieren in ein Flat-File)

Überprüfen Sie den Parameter UTL_FILE_DIR, und setzen Sie ihn gegebenenfalls auf das Verzeichnis, in dem Sie die Dictionary-Datei erstellen wollen. (z. B. UTL_FILE_DIR = /oracle/logs)

Achtung: Nach Änderung dieses Parameters muss die Datenbank durchgestartet werden!

Hinweis: Ab Version 9.2 muss für eine vollständige Überwachung der DML Befehle folgendes Kommando einmalig in der Datenbank abgesetzt werden:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

Erst danach werden auch die Updates vollständig im LogMiner dokumentiert!

Erstellen Sie das Data Dictionary:

BEGIN
DBMS_LOGMNR_D.BUILD(
DICTIONARY_FILENAME => 'dictionary.ora',
DICTIONARY_LOCATION => '/oracle/logs');
END;
/


Die zu analysierenden Logfiles registrieren:

Hinweis: Die aktuell benutzte Log-Datei erhalten Sie durch:

SELECT member FROM v$logfile WHERE group#=(
select group# FROM v$log WHERE status='CURRENT');

BEGIN
/* Erste Log-Datei zur Auswahl hinzufügen*/
DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/logs/log1.f',
OPTIONS => dbms_logmnr.NEW);

/* Zweite Log-Datei zur Auswahl hinzufügen*/
DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/logs/log2.f',
OPTIONS => dbms_logmnr.ADDFILE);  
END;
/

/* Optional kann die letzte Datei wieder aus der Auswahl entfernt werden*/
BEGIN
DBMS_LOGMNR.ADD_LOGFILE(
LOGFILENAME => '/oracle/logs/log2.f',
OPTIONS => dbms_logmnr.REMOVEFILE);
END;
/


Mit Hilfe der Prozedur ADD_LOGFILE können Sie nun die Liste der Logfiles bearbeiten. Sie können Logfile hinzufügen (ADDFILE) oder auch von der Liste entfernen (REMOVEFILE).

Die Analyse starten

BEGIN
DBMS_LOGMNR.START_LOGMNR(
DICTFILENAME =>'/oracle/logs/dictionary.ora');
END;
/

Durch das Aufrufen der Prozedur START_LOGMNR wird nun die Analyse der Logfiles gestartet und die Ergebnisse werden über die View V$LOGMNR_CONTENTS dargestellt.

Wenn Sie auch DDL Statements in den Log-Files nachvollziehen möchten, müssen Sie bevor die DDL Befehle absetzen folgendes Kommando ausführen:

BEGIN
DBMS_LOGMNR.START_LOGMNR (OPTIONS => DBMS_LOGMNR.DDL_DICT_TRACKING);
END;
/

Ergebnisse der Abfragen:

Die Informationen können nun aus der V$LOGMNR_CONTENTS ausgelesen werden. Bevor die Prozedur START_LOGMNR  ausgeführt wurde ist diese View leer.

Die Analyse von RedoLog-Dateien mit Hilfe des LogMiners gilt immer nur auf Session-Ebene. Beenden Sie ihre Session, gehen auch ihre Analyse-Ergebnisse in der V$LOGMNR_CONTENTS verloren.

Beispielabfrage (Welche Änderungen wurden in der letzten Stunde auf Objekten von Benutzer Scott durchgeführt):

SELECT scn,timestamp,sql_redo,sql_undo,row_id,seg_name,seg_owner,username
FROM sys.v$logmnr_contents
WHERE  seg_owner='SCOTT'
AND timestamp between sysdate-1/24 and sysdate;

Beschreibung der v$logmnr_contents Tabelle:

V$LOGMNR_CONTENTS:

Name            Type         Description/comments
--------------- ------------ ---------------------------------------------------
SCN             NUMBER       System Change Number des Redo Records
TIMESTAMP       DATE         Geschätzte Zeit des Redo Records
THREAD#         NUMBER       Redo log Thread (für OPS oder RAC)
LOG_ID          NUMBER       Log Sequence Number innerhalb des redo thread
XIDUSN          NUMBER       Rollback Segment Number in der die txn sich aufhält
XIDSLT          NUMBER       Slot in der RBSs txn table in der die txn sich aufhält
XIDSQN          NUMBER       Sequenz Nummer des Times slot in txn table in RBS reused
RBASQN          NUMBER       Log sequence number der Redo Byte Address (RBA)
RBABLK          NUMBER       Block innerhalb der Redolog-datei
RBABYTE         NUMBER       Byte offset innerhalb 512-byte block der Redolog-datei
UBAFIL          NUMBER       Datei ID # innerhalb Rollback Segment
UBABLK          NUMBER       Block ID # innerhalb rollback Segment
UBAREC          NUMBER       Slot # innerhalb des Rollback-Blocks
UBASQN          NUMBER       # of times slot within block within RBS reused
ABS_FILE#       NUMBER       Absolute file ID # der Daten
REL_FILE#       NUMBER       Relative file ID # der daten
DATA_BLK#       NUMBER       Block ID # innerhalb  der Datendatei
DATA_OBJ#       NUMBER       OBJECT_ID in DBA_OBJECTS
DATA_OBJD#      NUMBER       DATA_OBJECT_ID in DBA_OBJECTS
SEG_OWNER       VARCHAR2(32) Schema Name des Objekt-Eigentümers
SEG_NAME        VARCHAR2(32) Objektname
SEG_TYPE        NUMBER       Objekttyp
SEG_TYPE_NAME   VARCHAR2(32) Segment-Typ-Name
TABLE_SPACE     VARCHAR2(32) Name des Tablespace in dem das Objekt liegt
ROW_ID          VARCHAR2(19) ROWID
SESSION#        NUMBER       Wert der Spalte V$SESSION.SID der Transaktion
SERIAL#         NUMBER       Wert der Spalte V$SESSION.SERIAL# der Transaktion
USERNAME        VARCHAR2(32) Benutzername der die Transaktion ausführt
SESSION_INFO    VARCHAR2(4000) Zusätzliche Informationen
ROLLBACK        NUMBER       0 = Transaktion commited, 1 = Transaktion rolled back
OPERATION       VARCHAR2(32) Typ der SQL Operation
SQL_REDO        VARCHAR2(4000) Text des SQL statement (um es nochmal auszuführen)
SQL_UNDO        VARCHAR2(4000) Text des SQL statement (um es rückgängig zu machen)
RS_ID           VARCHAR2(32) Name des Rollback segments
SSN             NUMBER       SQL Sequence number
CSF             NUMBER       SQL continuation flag (0 = not continued)
INFO            VARCHAR2(32) Zusätzliche Informationen
STATUS          NUMBER       txn status

Weitere Information zum Log-Miner erhalten Sie in unserem Backup & Recovery und in unserem DBA III Kurs. Wir freuen uns auf Sie!

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.