Tipps & Tricks: Log Miner Bereich: DBA Erstellung: 01/2004 MP Versionsinfo: 9.2, 10.2, 11.2 Letzte Überarbeitung: 06/2009 MP 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: Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 1 von 4 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( Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 2 von 4 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) Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 3 von 4 LOG_ID XIDUSN XIDSLT XIDSQN RBASQN RBABLK RBABYTE UBAFIL UBABLK UBAREC UBASQN ABS_FILE# REL_FILE# DATA_BLK# DATA_OBJ# DATA_OBJD# SEG_OWNER SEG_NAME SEG_TYPE SEG_TYPE_NAME TABLE_SPACE ROW_ID SESSION# SERIAL# USERNAME SESSION_INFO ROLLBACK OPERATION SQL_REDO SQL_UNDO RS_ID SSN CSF INFO STATUS NUMBER Log Sequence Number innerhalb des redo thread NUMBER Rollback Segment Number in der die txn sich aufhält NUMBER Slot in der RBSs txn table in der die txn sich aufhält NUMBER Sequenz Nummer des Times slot in txn table in RBS reused NUMBER Log sequence number der Redo Byte Address (RBA) NUMBER Block innerhalb der Redolog-datei NUMBER Byte offset innerhalb 512-byte block der Redolog-datei NUMBER Datei ID # innerhalb Rollback Segment NUMBER Block ID # innerhalb rollback Segment NUMBER Slot # innerhalb des Rollback-Blocks NUMBER # of times slot within block within RBS reused NUMBER Absolute file ID # der Daten NUMBER Relative file ID # der daten NUMBER Block ID # innerhalb der Datendatei NUMBER OBJECT_ID in DBA_OBJECTS NUMBER DATA_OBJECT_ID in DBA_OBJECTS VARCHAR2(32) Schema Name des Objekt-Eigentümers VARCHAR2(32) Objektname NUMBER Objekttyp VARCHAR2(32) Segment-Typ-Name VARCHAR2(32) Name des Tablespace in dem das Objekt liegt VARCHAR2(19) ROWID NUMBER Wert der Spalte V$SESSION.SID der Transaktion NUMBER Wert der Spalte V$SESSION.SERIAL# der Transaktion VARCHAR2(32) Benutzername der die Transaktion ausführt VARCHAR2(4000) Zusätzliche Informationen NUMBER 0 = Transaktion commited, 1 = Transaktion rolled back VARCHAR2(32) Typ der SQL Operation VARCHAR2(4000) Text des SQL statement (um es nochmal auszuführen) VARCHAR2(4000) Text des SQL statement (um es rückgängig zu machen) VARCHAR2(32) Name des Rollback segments NUMBER SQL Sequence number NUMBER SQL continuation flag (0 = not continued) VARCHAR2(32) Zusätzliche Informationen 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! Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 4 von 4