Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  1/2003
suche: 

ORDIX News Archiv

Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.

Reihe Oracle 9i New Features - Teil VI:
Flashback

Mit Hilfe des neuen Features Oracle Flashback ist es möglich, ein konsistentes Abbild der Datenbank zu einem bestimmten Zeitpunkt in der Vergangenheit zu erhalten. Es kann beispielsweise das Wiederherstellen von Datensätzen, die versehentlich gelöscht wurden, erleichtern. Ein Grund, Ihnen dieses neue Feature vorzustellen.

Grundlagen

Oracle Flashback ist mit der Version 9.0 erschienen und in der Version 9.2 erweitert worden. Mit diesem Feature können Daten aus der Vergangenheit abgefragt werden. Der Benutzer kann den Zeitpunkt entweder durch die Angabe einer bestimmten Zeit oder einer bestimmten System Change Number (SCN) angeben.

Oracle Flashback bietet unter anderem folgende Anwendungsmöglichkeiten:

Oracle Flashback nutzt die Funktionalität des UNDO Managements. Das heißt, die Rollback Segmente werden automatisch von der Instanz verwaltet. Eingeschaltet wird das UNDO Management durch Setzen der init<SID>.ora Parameter UNDO_MANAGEMENT und UNDO_TABLESPACE (siehe ORDIX News 4/2002).

Mit Hilfe des Initialisierungsparameters UNDO_RETENTION wird festgelegt, wie lange die UNDO Informationen in den Rollback Segmenten festgehalten werden sollen.

Es gibt zwei Möglichkeiten, Oracle Flashback zu aktivieren:

  1. Der Flashback Modus wird mit Hilfe des Packages DBMS_FLASHBACK eingeschaltet. Wird er nicht explizit ausgeschaltet, so ist der Flashback Modus während der gesamten Session aktiv. DML-Statements sind in diesem Modus nicht möglich. Unterschiedliche Sessions können den Flashback - Modus zu unterschiedlichen Zeiten verwenden.
  2. Ab Oracle 9i Release 2 wird diese Funktionalität erweitert, indem Flashback Abfragen erstellt werden können. Das SELECT Statement wird um die "AS OF" Klausel erweitert, so dass z. B. Joins, Subqueries und Views auf gleiche Tabellen zu unterschiedlichen Zeitpunkten möglich sind. Außerdem können Tabellen mit Hilfe INSERT oder CREATE TABLE AS SELECT Statements leicht wiederhergestellt werden. In diesem Modus sind DML-Statements möglich.

Für beide Aktivierungen gilt, dass der Benutzer das FLASHBACK Privileg für die Tabelle oder das Privileg FLASHBACK ANY TABLE haben muss.

DBMS_FLASHBACK Package

Zum Ausführen des Packages muss der Benutzer das Privileg EXECUTE DBMS_FLASHBACK besitzen.

Das DBMS_FLASHBACK Package enthält folgende Prozeduren:

ENABLE_AT _TIME

Das Oracle Flashback wird für den gewünschten Zeitpunkt aktiviert. Diesem Zeitpunkt wird eine SCN zugeordnet, die den konsistenten Zustand der Datenbank zu diesem Zeitpunkt widerspiegelt. Alle 5 Minuten wird die SCN intern aufgezeichnet, die angegebene Zeit wird abgerundet.

SQL> EXECUTE dbms_flashback.enable_at_time (‘24-FEB-01 11:00:00‘);

ENABLE_AT_SYSTEM_CHANGE _NUMBER

Flashback wird für diese SCN aktiviert. Die aktuelle SCN kann mit der Prozedur GET_SYSTEM_CHANGE_NUMBER ermittelt werden.

SQL> EXECUTE dbms_flashback.enable_at_system_change_number (345354);

GET_SYSTEM_CHANGE_NUMBER

Diese Funktion gibt die aktuelle SCN zurück. Möchte man später zu diesem Stand der Datenbank zurückkehren, so kann hier die aktuelle SCN ermittelt werden.

SQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM dual;

DISABLE

Diese Funktion schließt die Flashback Session, so dass mit dem aktuellen Datenbestand weiter gearbeitet werden kann.

SQL> EXECUTE dbms_flashback.disable

Flashback Abfrage

Durch den Gebrauch der "AS OF" Klausel in einer SELECT Anweisung ist es möglich, die Daten von Tabellen zu unterschiedlichen Zeiten abzufragen. Es können jedoch nur Daten abgefragt werden, die nicht älter als 5 Tage sind. Ist die Datenbank zwischenzeitlich neu gestartet worden, so können die Daten nur noch mit Hilfe der SCN zurückgeholt werden.

SELECT ... FROM ... AS OF [TIMESTAMP|SCN] <Ausdruck> ...

Es kann entweder ein Datum im Format TIMESTAMP oder die SCN angegeben werden. Die SCN erhält man mit Hilfe des DBMS_FLASHBACK Packages (siehe oben).

Hinweis: Wurde die Tabelle mit DROP oder TRUNCATE gelöscht oder die Tabellenstruktur mit MODIFY geändert, so können die Daten nicht wiederhergestellt werden, da sich keine gültigen UNDO Informationen mehr in den Rollbacksegmenten befinden. DDL Statements, die Storage Parameter wie PCTFREE oder INITTRANS verändern, können auf die Tabelle ausgeführt werden, ohne dass die UNDO Informationen verloren gehen.

Beispiel: Flashback Abfrage

Das folgende Beispiel soll die Verwendung beider oben beschriebener Funktionalitäten verdeutlichen:

  1. Es muss zunächst sichergestellt werden, ob das automatische UNDO Management eingeschaltet ist. Ist das nicht der Fall, so müssen die entsprechenden Parameter UNDO_MANAGEMENT und UNDO_TABLESPACE in die init<SID>.ora eingetragen werden (siehe ORDIX News 4/2002).
  2. Der Standardwert für UNDO_RETENTION ist 900 Sekunden (entspricht 15 Minuten). Da in unserem Beispiel die UNDO Informationen 30 Minuten lang behalten werden sollen, wird die UNDO_RETENTION geändert: SQL> ALTER SYSTEM SET UNDO_RETENTION = 1800;
  3. Gehört die Tabelle nicht dem Benutzer, so muss ihm entweder das Privileg FLASHBACK ON <Tabellenname> oder FLASHBACK ANY TABLE erteilt werden.
  4. Der Benutzer USER1 besitzt die folgende Tabelle abt:
     VORNAME   NAME   ABT_NR 
     Michael   Miller   10 
     Alexander   Kijo   20 
     Den   Raphaell   30 
     Tobias   Siegel   20 


  5. Am 23.10.02 um 13:34 Uhr werden versehentlich alle Mitarbeiter der Abteilung 20 gelöscht.
     VORNAME   NAME   ABT_NR 
     Michael   Miller   10 
     Den   Raphaell   30 

  6. a. Die alten Daten können mittels DBMS_FLASHBACK zurückgewonnen werden.
    SQL> execute dbms_flashback.enable_at_time
    (‘23-OCT-02 13:30:00’); SQL> select * abt;


     b. Rückgewinnung mittels select .. as of.
    SQL> SELECT * FROM abt AS OF TIMESTAMP
    (SYSDATE – INTERVAL ‘4‘ MINUTE);
In beiden Fällen ist der ursprüngliche Inhalt wieder hergestellt:
 VORNAME   NAME   ABT_NR 
 Michael   Miller   10 
 Alexander   Kijo   20 
 Den   Raphaell   30 
 Tobias   Siegel   20 

Fazit

Mit Hilfe von Oracle Flashback ist es möglich, über relativ kurze Zeitintervalle Trendanalysen zu erzeugen. Außerdem erleichtert Oracle Flashback das Wiederherstellen von Daten, die kurz vorher gelöscht wurden. Eine sehr große UNDO-RETENTION führt allerdings zu einem stark erhöhten Bedarf an Rollback-Blöcken, was zu Performance-Einbußen führen kann.

Stephan Sippel (info@ordix.de).