Flashback Technologien
von Ulrike Schwinn, Oracle Deutschland B.V. & Co. KG
Zurückgehen in der Zeit ist schon lange ein Feature, das die Oracle Datenbank unterstützt. Flashback in Oracle bedeutet Daten eines früheren Zeitpunkts zur Verfügung zu stellen.
Schon in Oracle 9i wurde begonnen diese Anforderung durch das Flashback Query Konzept in der Datenbank zu implementieren. Damit ist es möglich, Daten zu einem früheren Zeitpunkt auf Session-
bzw. Statement- Ebene zur Verfügung zu stellen. In Oracle Database 10g wurde diese Technologie um neue Konzepte erweitert, die es erlauben, Flashback von Tabellen bis auf Datenbankebene zu nutzen.
In 11g sind Erweiterungen im Bereich Transaktionen (siehe Flashback Transaction) und das Monitoren von Daten über ihren gesamten Lebenszyklus
(siehe Flashback Data Archive) implementiert worden.
Einige Beispiele für die Nutzung der Flashback Technologien sind:
- Abfragen um Informationen aus der Vergangenheit zu selektieren
- Rollback von Transaktionen
- Wiederherstellen von gelöschten Tabellen
- Zurücksetzen der gesamten Datenbank ohne Point-in-Time Recovery
Alle Flashback Features stehen automatisch ohne zusätzliche Installation zur Verfügung. Die Nutzung speziell der Flashback Query Technologie ist sogar
in Oracle Werkzeugen wie APEX als Standard implementiert und ohne Kenntnis der entsprechenden Syntax verwendbar.
Folgende Abschnitte geben einen kurzen Überblick und eine kurze Beschreibung über die einzelnen Techniken.
- Flashback Query: Hiermit wird die Abfrage von Daten zu einem früheren Zeitpunkt ermöglicht. Dabei kann immer nur eine einzige Version der Daten pro Statement selektiert werden.
Eine fehlerhaften Dateneingabe, die schon mit COMMIT festgeschrieben ist, kann auf diese Weise rückgängig gemacht werden. Ein anderer Anwendungsfall wäre,
einen Datenvergleich zu verschiedenen Zeitpunkten zu ermöglichen.
Implementiert ist diese Technik über die AS OF Klausel im SELECT Statement oder über das Package DBMS_FLASHBACK für eine gesamte Session. Mit DBMS_FLASHBACK.ENABLE_AT_TIME
oder DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER kann Flashback Query auf alle Statements einer Session ausgeweitet werden. Mit der Prozedur DBMS_FLASHBACK.DISABLE
wird dieser Zustand für die Session beendet.
Einzige Voraussetzung ist die Nutzung von UNDO Management, d.h. das Setzen von UNDO_MANAGEMENT=AUTO.
Um Flashback Query Feature zu nutzen, ist es generell wichtig, Zugriff auf ältere (schon mit Commit abgeschlossene) Daten zu haben. Daher verwendet Oracle die sogenannte Undo Retention - das ist die Dauer, die die Undo Daten nach Abschluss einer Transaktion gehalten werden.
Der Parameter UNDO_RETENTION, falls gesetzt, fungiert dabei als untere Grenze, damit die Undo Daten mindestens so lange vorgehalten werden,
wie der Parameter in Sekunden angibt.
Hinweis: Seit 10g gibt es ein automatisches Undo Tuning für die Bestimmung der Undo Retention. Die Datenbank (MMON) sammelt Statistiken und tunt die Undo Retention Periode basierend auf diesen Statistiken. Für AUTOEXTEND Undo Tablespaces bedeutet dies, dass das System Undo für mindestens den Zeitraum von UNDO_RETENTION beibehalten wird, für "fixed-size" Tablespaces hingegen wird die maximale UNDO Periode berechnet, und der UNDO_RETENTION Parameter ignoriert. Mehr Informationen dazu finden Sie auch in der Note 461480.1.
Die folgende Query listet die getunte Undo Retention:
Falls der UNDO Platz nicht ausreichend vorhanden ist, werden die DML Operationen trotzdem durchgeführt, und es kann beim Flashback Query zum "Ora-1555 "snapshot too old" Fehler kommen. Gibt man zusätzlich beim Anlegen des UNDO Tablespaces RETENTION GUARANTEE mit, wird im Gegensatz zum Default Verhalten garantiert, dass
zugunsten der Vorhaltezeit (UNDO_RETENTION) der Platz reserviert bleibt. DML-Operationen, die den UNDO-Platz benötigen, könnten dann allerdings aus Platzmangel fehlschlagen.
Im folgenden Beispiel untersuchen wir die Operationen auf der Tabelle DEPT. Versehentlich wurden einige DML-Kommandos durchgeführt, die auch noch mit einem COMMIT abgeschlossen wurden.
Der aktuelle Stand der Tabelle sieht folgendermassen aus:
Mit folgender Abfrage kann man sich nun einen "älteren" Stand der Daten ansehen.
Folgendes Beispiel zeigt die out-of-the-box Implementierung von Flashback Query in APEX (Application Express). Der Anwender kann im Menü "Aktionen" den Menüpunkt "Flashback" auswählen.
Danach können die Daten zu einem älteren Zeitpunkt (Angabe in Minuten) abgefragt werden.
- Flashback Versions Query: Im Unterschied zu Flashback Query werden bei Flashback Versions Query die verschiedenen Versionen einer Zeilen
in einem gegebenen Zeitintervall angezeigt. Metadaten der Versionen werden in den Pseudospalten wie VERSIONS_OPERATION und VERSIONS_STARTTIME usw. abgelegt und
sind einfach zu selektieren.
Das Beispiel von oben sieht dann folgendermassen aus.
- Flashback Transaction Query: Wie der Name schon andeutet, kann Flashback Transaction Query die Änderungen an den Daten auf Transaktionsebene anzeigen.
Dabei wird die Tabelle FLASHBACK_TRANSACTION_QUERY verwendet, die nicht nur Rowids, Operationstypen und Logon User anzeigt, sondern auch die entsprechende Undo
SQL Statements der zugehörigen Transaktionen (VERSIONS_XID). So können Transaktionen analysiert und auditiert und darüberhinaus Probleme behoben werden.
Das Beispiel von oben kann mit folgender Abfrage erweitert werden.
Flashback Transaction Query ist im SQL Developer für Tabellen in Oracle Version 11g implementiert. Im Tabellen-Menü muss einfach nur der Reiter
Flashback selektiert werden.
- Flashback Table: Möchte man alle versehentlich abgesetzten DML-Operationen einer Tabelle "auf einen Schlag" zurücksetzen, eignet sich die
Flashback Table Technologie. Flashback Table ermöglicht über ein einziges Kommando das Zurücksetzen einer Tabelle oder mehrere Tabellen auf einen
bestimmten Zeitpunkt, der durch eine SCN oder eine bestimmte Zeitangabe (TIMESTAMP) definiert ist.
Wichtig zu wissen ist, dass keine DDL Operationen in diesem Zeitraum erfolgt sein dürfen und ROW MOVEMENT für die Tabelle eingeschaltet sein muss.
- Flashback Drop: Hiermit wird das DROP TABLE Kommando rückgängig gemacht. Die Nutzung erfolgt in Verbindung mit dem Recyclebin.
In 11g ist der Parameter RECYCLEBIN per Default auf ON gesetzt. Um dieses Feature zu nutzen, sollte diese Einstellung beibehalten werden.
Bei einem DROP TABLE Kommando werden automatisch die Tabellen und zugehörige Objekte wie Indizes, Constraints (ausser referentielle Integrität) und nested tables im sogenannten Recyclebin zur Verfügung gestellt.
Dies führt keineswegs zu Performance-Einbussen, da ein einfaches Umbenennen der zugehörigen Objekte und kein explizites Kopieren in einen neuen
Bereich erfolgt. Somit ist auch klar, dass im Gegensatz zu den oben genannten Flashback Funktionalitäten Flashback Drop nicht von der UNDO Retention Zeit
abhängig ist, sondern vom verfügbaren Platz im Tablespace. Die Extents der gelöschten Tabelle werden nur als gelöscht markiert und erst dann überschrieben, wenn
der Platz im Tablespace dies erfordert.
Hinweis: Möchte man die Objekte vollständig aus dem Recyclebin löschen, kann man dies mit PURGE RECYCLEBIN oder mit PURGE DBA_RECYCLEBIN für alle Objekte manuell erreichen.
Flashback Drop bzw. Flashback Table sind übrigens auch über den Enterprise Manager verwendbar. Unter "High Availability => Perform Backup" finden sich
die Operationstypen "Flashback Existing Tables" für die Flashback Table und "Flashback Dropped Tables" für die Flashback Drop Operationen.
- Flashback Transaction: Diese Technologie ist erst in 11g eingeführt worden. Die Idee ist, Transaktionen in ihrer Gesamtheit, d.h. zusammen
mit den zugehörigen abhängigen Transaktionen, mit einem einzigen Kommando zurückzusetzen. Flashback Transaction ist im laufenden Datenbankbetrieb
ausführbar. Notwendig ist allerdings das Einschalten von Supplemental Logging und der Archive Log Mode. Ab 11g ist ein minimales Supplemental
Logging als Default für neuangelegte Datenbanken eingeschaltet. Um die Rückführung aller abhängigen Transaktionen sicherzustellen, sollte auch noch das Primary und Foreign Key Supplemental
Logging eingeschaltet werden.
Zur Durchführung wird das Package DBMS_FLASHBACK verwendet. Als Eingabeparameter werden die Transaktionen bzw. die zugehörigen XIDs (Transaction Identifiers)
benötigt, die zurückgesetzt werden sollen. Die abhängigen Transaktionen werden dabei automatisch ermittelt und gleichermassen zurückgeführt.
Die XIDs der Transaktionen können, wie schon im oberen Abschnitt erläutert, über die Pseudospalte VERSIONS_XID ermittelt werden (siehe Flashback Query).
Ein zusätzlicher Parameter OPTIONS gibt vor, wie mit den abhängigen Transaktionen verfahren werden soll. Der Default ist NOCASCADE.
Genauere Informationen dazu finden sich im Oracle Database PL/SQL Packages and Types Reference Handbuch.
TRANSACTION_BACKOUT schliesst übrigens die DML Operationen nicht mit COMMIT ab. Dies muss noch nachträglich durchgeführt werden.
Auch hier kann die Nutzung von Enterprise Manager zur Vereinfachung beitragen. Über den Reiter "Availability" => "Backup&Recovery" => "Transactions"
wird die Logminersicht aktiviert, die im Hintergrund beim Flashback Transaction genutzt wird. Danach kann die betroffene Transaktion ausgewählt und
das Zurücksetzen über die graphische Oberfläche durchgeführt werden. Da Flashback Transaction Query die Logminer-Technologie verwendet,
gelten für die Flashback Transaction Funktionalität die gleichen Einschränkungen wie für den Logminer.

- Flashback Database: Muss die gesamte Datenbank zurückgesetzt werden, da Operationen wie DROP USER, TRUNCATE usw. versehentlich durchgeführt wurden,
kann die Flashback Database Technik zum Einsatz kommen. Das Konzept des Flashback Database, eine Art "Rewind Button" der Datenbank, führt ähnlich wie das Point-In-Time-Recovery, die Datenbank in einen konsistenten
Zustand in der Vergangenheit zurück. Diese Operation ist sehr schnell, da kein Restore eines Backups wie beim normalen Recovery erforderlich ist.
Notwendig für die Nutzung ist der Archivelog Mode und zusätzlich auch ein spezieller Flashbacklog Mode. Um den Rahmen dieses Beitrags nicht zu sprengen,
werden wir dieses Thema in einem späteren Beitrag umfassend erklären.
- Flashback Data Archive : Diese Technologie steht ab 11g zur Verfügung und liefert einen Mechanismus zum lückenlosen Aufbewahren von Datensätzen
über eine festgelegte Frist. Diese Frist kann im Unterschied zum Flashback Query beliebig lang sein zum Beispiel auch eine Zeitspanne über Jahre umfassen -
im Extremfall über den gesamten Lebenszyklus. Sinnvoll ist dieses Feature, um Compliance zu gewährleisten oder Auditings durchzuführen. Wer mehr darüber erfahren
möchte, kann im Tipp Flashback Data Archives: Das perfekte Gedächtnis der Datenbank die notwendigen Details erfahren.
Konfiguration und Implementierung
Wichtig zu wissen ist, dass die einzelnen Technologien unterschiedlich implementiert sind und somit ein unterschiedliches Setup benötigen.
So werden je nach Feature, Undo Informationen, Archive Log, Supplemental Log, Flashback Log oder Recyclebin Informationen benötigt.
Folgende Tabelle fasst die notwendigen Konfigurationsparameter pro Technologie zusammen:
Technologie | Konfiguration |
Flashback Query | automatisches UNDO Management |
Flashback Versions Query | automatisches UNDO Management |
Flashback Transaction Query | automatisches UNDO Management und Supplemental Logging |
---|
Flashback Table | automatisches UNDO Management und Table Row Movement |
Flashback Drop | Initialisierungsparameter RECYCLEBIN (ab 11g) |
Flashback Transaction | Archive Log und Supplemental Logging |
Flashback Database | Archive Log und Flashback Log Mode |
Flashback Data Archive | Flashback Archive |
Lizenzhinweis
Flashback Table, Flashback Database, Flashback Transaction und Flashback Transaction Query stehen in der Enterprise Edition zur Verfügung.
Ursprünglich waren die Archive als eigenständige Option zur Enterprise Edition der Oracle Database 11g unter dem Namen Total Recall eingeführt wurden - was übersetzt so viel heißt wie 'das perfekte Gedächtnis'. Seit Ende Juni 2012 sind sie Teil der Advanced Compression Option der Enterprise Edition (EE). Flashback Query bzw. Flashback Versions Query
und Flashback Drop hingegen stehen in allen Editionen ohne zusätzliche Lizenzierung zur Verfügung.
Weitere Informationen
Folgende Links können nützlich sein:
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|