Alles Flashback oder was?

27.
September
2019
Veröffentlicht von: Katja Werner

Flashback ist ein Begriff, der im Oracle Umfeld im Laufe der Versionen inflationär verwendet wurde. Verschiedene Editionen, verschiedene Technologien, mal im Verbund mit Undo, dann wiederum unter Zuhilfenahme des Recyclebins oder von Flashback Logs – nahezu unendlich erscheinen die Flashback Features. Letztlich bedeutet „Flashback“ Rückblende und im Datenbankumfeld geht es darum, irgendwie Daten „von früher“ zurückzuholen. Dazu gibt es unzählige Möglichkeiten. Dieser Monatstipp soll Licht in das Dunkel der Oracle Flashbacks bringen. Möge der Flashback mit euch sein.

(Fast) alles über Flashback(s)

Flashback Table (To-Before-Drop) / Flashback Drop

Dieses Feature darf nicht mit „Flashback Table (Point in Time)“ verwechselt werden, auch wenn beide Features in der „SQL Language Reference“ von Oracle unter demselben Kommando aufgeführt sind und wenn beide Dinge oft im gleichen Atemzug genannt werden. Das hier gemeinte Flashback Table darf mit der Standard Edition genutzt werden und bezieht sich allein auf das Kommando, mit dem eine gelöschte Tabelle aus dem Recyclebin zurückgeholt wird – wenn er denn auf der Datenbank eingeschaltet ist und die Tabelle auch noch dort ist. Genaugenommen ist diese Art des Flashbacks nichts weiter als ein Rückbenennen der Tabelle. Verfügbar ist der Recyclebin seit Version 9i. Voraussetzung ist, dass der Recyclebin eingeschaltet ist (=Default):

show parameter recyclebin

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on


conn scott/***@pdb1
drop table t1;
show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T1               BIN$kBPFIf/qF4LgUAoKGDgaJA==$0 TABLE        2019-08-14:14:19:34

flashback table t1 to before drop;

Bei der Wiederherstellung ist unter anderem Folgendes zu beachten:

  • nur für locally managed Tablespaces und nicht für den SYSTEM Tablespace
  • nicht für SYS-Objekte
  • abhängige Objekte (z. B. Indices) müssen nach Wiederherstellung der Tabelle umbenannt werden
  • referentielle Constraints werden nicht wieder hergestellt
     

Flashback Query (SELECT AS OF)

Flashback Query ist nicht zu verwechseln mit den ähnlich klingenden – und im Übrigen auch auf denselben technischen Grundlagen beruhenden – Features Flashback Transaction oder Flashback Transaction Query, welche die Enterprise Edition erfordern. Mit Flashback Query können versehentlich gelöschte oder geänderte Zeilen einer Tabelle aus dem Undo Tablespace mit einer früheren SCN oder einem Timestamp ausgelesen und so zurückgeholt werden. Flashback Query kam bereits mit der Oracle Version 9i (hier noch in Form von dbms_flashback) und darf in der Standard Edition genutzt werden. Der Parameter UNDO_RETENTION bestimmt, wie lange Daten im UNDO Tablespace möglichst vorzuhalten sind. Allerdings ist dies kein fester Grenzwert sondern Undo Bereiche können auch früher überschrieben werden, wenn nicht ausreichend Platz vorhanden ist. Das Kommando zum Selektieren der Daten mit Flashback Query (SELECT AS OF) lautet:

select * from t1 as of timestamp to_timestamp('14.08.19 14:17:00','dd.mm.yy hh24:mi:ss');

Wie wir hier sehen, wird ein bestimmter Zeitpunkt mitgegeben. Verbunden mit einem insert into können so Daten zurückgeholt und direkt in die Tabelle wieder eingefügt werden.
 

Flashback Version Query (VERSIONS BETWEEN)

Dieses Feature ist lt. Ann Sjökvist und Pini Dibask auch mit der Standard Edition nutzbar, Marco Mischke schreibt in seinem Blog, dass die Enterprise Edition lizenziert sein muss. Der Oracle Licensing Guide ist bezüglich der Flashback Features nicht klar interpretierbar. Eine entsprechende Anfrage bei Oracle von der Muniqsoft Consulting GmbH ist aktuell noch nicht beantwortet, so dass Sie hierzu bitte Ihren Account Manager fragen, um sicher zu sein, keine Lizenzverletzung zu begehen.

Diese Art Flashback ist dem Flashback Query sehr ähnlich. Es ist eine Weiterentwicklung von Flashback Query und kam mit Oracle 10g. Der Fokus der Abfrage dient nicht einem vorgegeben Zeitpunkt wie bei Flashback Query sondern den verschiedenen Versionen von einer Zeile innerhalb eines Zeitraumes (VERSIONS BETWEEN). So fragt folgendes Kommando die unterschiedlichen Inhalte der Spalten id und kommentar der Tabelle t1 zur Bedingung id=1 ab:

SELECT versions_xid XID, versions_startscn START_SCN, versions_endscn END_SCN, versions_operation OPERATION, id, kommentar from t1 versions between scn minvalue and maxvalue where id=1;

XID               START_SCN    END_SCN O         ID KOMMENTAR
---------------- ---------- ---------- - ---------- ------------------------------------------------------------
070014005D010000    2086382            U          1 geaendert fuer flashback transaction backout, session 2
09000B00E6010000    2086298    2086382 U          1 geaendert fuer flashback transaction backout, session 1
                               2086298            1 initial

Wir sehen, wie die Inhalt der kommentar-Spalte zur id=1 waren:

  • zu Beginn (SCN 2086298) „initial“, von SCN 2086298 bis 2086382 upgedated auf „geaendert fuer flashback transaction backout, session 1“ und mit SCN geändert in „geaendert fuer flashback transaction backout, session 2“.
     

Flashback Transaction Query

Diese Möglichkeit darf nur mit der Enterprise Edition genutzt werden. Sie ist seit Version 10g verfügbar. Prinzipiell funktioniert diese Methode genauso wie Flashback Query und Flashback Version Query – die Daten werden aus dem Undo Tablespace gelesen. Ein Unterschied: Supplemental Logging muss enabled sein, um vernünftige Ergebnisse zu erhalten. Ein weiterer Unterschied und der entscheidende Vorteil gegenüber Flashback Query und Flashback Version Query ist, dass nicht nur die Änderung einzelner Zeilen ermittelt wird, sondern der gesamte historische Verlauf einer Transaktion nachvollzogen werden kann. Die entsprechenden UNDO-Befehle werden mit erfasst, so dass die gewünschten Transaktionen komfortabel rückgängig gemacht werden können. Diese Möglichkeit ist es sicherlich, welche im Gegensatz zur „einfachen“ Query nur Kunden der Enterprise Edition zugänglich gemacht werden soll.

Abfragt wird die View flashback_transaction_query:

update t2 set id=5 where id=1;
update t2 set id=6 where id=2;
commit;
-- Heraussuchen der XID:
SELECT versions_xid XID, versions_startscn START_SCN, versions_endscn END_SCN, versions_operation OPERATION, id, kommentar from t2 versions between scn minvalue and maxvalue where id in (1,2);

XID               START_SCN    END_SCN O         ID KOMMENTAR
---------------- ---------- ---------- - ---------- ---------------------
05001C00E1010000    2094497            D          1 initial
                               2094497            1 initial
05001C00E1010000    2094497            D          2 initial
                               2094497            2 initial

-- Heraussuchen der Undobefehle:
SELECT xid, start_scn , commit_scn, operation, logon_user, undo_sql FROM flashback_transaction_query WHERE xid = hextoraw('05001C00E1010000');

XID               START_SCN COMMIT_SCN OPERATION                        LOGON_USER
---------------- ---------- ---------- -------------------------------- --------------------------------------------------------------------------------------------------------------------------------
UNDO_SQL
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
05001C00E1010000    2094484    2094497 UPDATE                           SCOTT
update "SCOTT"."T2" set "ID" = '2' where ROWID = 'AAAFtoAALAAAACuAAB';

05001C00E1010000    2094484    2094497 UPDATE                           SCOTT
update "SCOTT"."T2" set "ID" = '1' where ROWID = 'AAAFtoAALAAAACuAAA';

05001C00E1010000    2094484    2094497 BEGIN                            SCOTT
SCOTT

 

Flashback Transaction (Backout)

Dieses Feature wird auch Flashback Transaction Backout genannt und ist eine Weiterentwicklung von Flashback Transaction. Es ist seit der Version 11g für die Enterprise Edition verfügbar. Vorteil von Flashback Transaction Backout ist, dass nicht nur eine sondern auch weitere, abhängige Transaktionen, die dieselben Tabellen betreffen, zurückgerollt werden können.

Das folgende Beispiel zeigt ein Update auf dieselbe Zeile der Tabelle t1 aus zwei unterschiedlichen Sessions. Die zweite Session ändert zudem noch vor dem Update auf t1 eine weitere Tabelle t2. Anschließend wird per Flashback Transaction Backout auf den Ursprungszeitpunkt zurückgerollt.

Als SYS:

update t1 set datum=sysdate,kommentar='geaendert fuer flashback transaction backout, session 1' where id=1;
commit;
-- in zweiter Session:
update t2 set datum=sysdate,kommentar='geaendert fuer flashback transaction backout, session 2' where fid=1;
update t1 set datum=sysdate,kommentar='geaendert fuer flashback transaction backout, session 2' where id=1;
commit;
select * from t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 14:59:04 geaendert fuer flashback transaction backout, session 2
         2 18.08.19 14:57:09 initial
         3 18.08.19 14:57:09 initial

select * from t2;

        ID        FID DATUM             KOMMENTAR
---------- ---------- ----------------- -------------------------------------------------
         1          1 18.08.19 14:59:03 geaendert fuer flashback transaction backout, session 2
         2          1 18.08.19 14:59:03 geaendert fuer flashback transaction backout, session 2
         3          2 18.08.19 14:57:09 initial

-- XIDs ermitteln (alternativ auch über Logminer möglich):
SELECT versions_xid XID, versions_startscn START_SCN, versions_endscn END_SCN, versions_operation OPERATION, id, kommentar from t1 versions between scn minvalue and maxvalue where id=1;

XID               START_SCN    END_SCN O         ID KOMMENTAR
---------------- ---------- ---------- - ---------- ------------------------------------------------------------
0A00200058010000    2079943            U          1 geaendert fuer flashback transaction backout, session 2
06001700DB010000    2079873    2079943 U          1 geaendert fuer flashback transaction backout, session 1
                               2079873            1 initial

DECLARE
  v_xid SYS.xid_array;
BEGIN
  v_xid := sys.xid_array('09000B00E6010000');
  DBMS_FLASHBACK.transaction_backout (numtxns => 1, xids => v_xid, options =>DBMS_FLASHBACK.cascade);
END;
/

select * from t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 14:57:09 initial
         2 18.08.19 14:57:09 initial
         3 18.08.19 14:57:09 initial

select * from t2;

        ID        FID DATUM             KOMMENTAR
---------- ---------- ----------------- -------------------------------------------------
         1          1 18.08.19 14:57:09 initial
         2          1 18.08.19 14:57:09 initial
         3          2 18.08.19 14:57:09 initial

Im Beispiel ist erkennbar, dass mit dem Flashback Transaction neben der Transaktion aus der ersten Session auch die gesamte abhängige Transaktion der zweiten Session zurückgerollt wurde. Damit erhielt nicht nur Tabelle t1 ihren Ursprungszustand wieder, auch die Tabelle t2, die ebenfalls in der zweiten Session geändert worden war, wurde zurückgesetzt. Dieses Verhalten muss dem Anwender bei Einsatz von Flashback Transaction Backout bewusst sein.
 

Flashback Table

Flashback Table ist seit Oracle 11g in der Enterprise Edition verfügbar. Wie bereits eingangs beschrieben hat das „Flashback Table“ bis auf die ersten zwei Worte nichts mit dem Befehl „Flashback Table (To-Before-Drop)“ gemein. Flashback Table stellt eine Tabelle aus dem Undo-Tablespace zu einem gewünschten Zeitpunkt in der Vergangenheit wieder her. Es ist komfortabler als Flashback Query (SELECT AS OF), was nur die Selektion von Daten zu einem früheren Zeitpunkt erlaubt. Der Parameter UNDO_RETENTION steuert, dass die Daten die entsprechende Zeit im Undo Tablespace vorgehalten werden, sicherstellen kann er es jedoch nicht. Voraussetzung für Flashback Table ist, dass Row Movement für die Tabelle(n) enabled ist.

delete from t1 where id=3;
commit;
select * from scott.t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 17:04:23 initial
         2 18.08.19 17:04:23 initial

flashback table t1 to timestamp to_timestamp('18.08.19 17:05','dd.mm.yy hh24:mi:ss');
select * from scott.t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 17:04:23 initial
         2 18.08.19 17:04:23 initial
         3 18.08.19 17:04:23 initial

Ein abschließendes Commit ist hier nicht erforderlich.

Restriktionen von Flashback Table sind unter anderem:

  • ein Zurückrollen über Strukturänderungen, die die Tabelle betreffen, hinaus ist nicht möglich
  • Indices, die nach dem Flashback-Zeitpunkt, gedroppt wurden, werden nicht wieder hergestellt (neu hinzugekommene Indices werden hingegen berücksichtigt).
     

Flashback Data Archive

Flashback Data Archive erschien mit Version 11g unter dem Namen Total Recall. Bis einschließlich Version 11.2.0.3 erforderte dieses Feature die Oracle Advanced Compression Option, seit Version 11.2.0.4 kann es in der Basisversion editionsübergreifend ohne Zusatzkosten genutzt werden.

Flashback Data Archive ist eine Verbesserung gegenüber Flashback Table. Geänderte Daten werden nicht mehr allein im Undo sondern in einem/mehreren separaten Tablespace/s in einem/mehreren Archive/n gespeichert. Somit ist garantiert, dass die Wiederherstellung auch zu einem früheren Zeitpunkt, völlig unabhängig von der Vorhaltezeit im UNDO Tablespace, erfolgen kann. Die Aufbewahrungszeit kann somit theoretisch viele Jahre sein. In der Praxis sind jedoch Restriktionen wie hoher Speicherplatzbedarf, Kompatibiliät bei Versionswechseln, Auswirkungen von DDL-Statements und ähnliches zu beachten.

Flashback Data Archive kann sehr vielfältig mit anderen Features (z. B. User Context Tracking) kombiniert werden.


-- no optimize data sonst Advanced Compression Option!:
create flashback archive fda_default tablespace fda_ts retention 1 year no optimize data;
alter flashback archive fda_default set default;
-- !!! nicht vergessen, Fehler gibts sonst erst bei der Wiederherstellung!!!:
alter table t1 enable row movement;
alter table t1 flashback archive;
flashback table t1 to timestamp to_timestamp('18.08.19 17:24','dd.mm.yy hh24:mi:ss');
-- oder nach truncate:
truncate table t1;
flashback table t1 to timestamp to_timestamp('18.08.19 17:24','dd.mm.yy hh24:mi:ss');
                    *
    ERROR at line 1:
    ORA-01466: unable to read data - table definition has changed
select * from t1  as of timestamp to_timestamp('18.08.19 17:24','dd.mm.yy hh24:mi:ss');

 

Flashback Database - Non Guaranteed Restore Points/Flashback to SCN

Flashback Database wurde bereits mit Oracle 10g für die Enterprise Edition eingeführt. Wenn der Flashback Modus in der Datenbank eingeschaltet ist, werden alle Änderungen in der Datenbank nicht nur in den Online/Archived Redo Logfiles protokolliert, sondern parallel dazu auch in Flashback Logs. An Hand dieser kann die gesamte Datenbank (einzelne Tablespaces gehen nicht) lückenlos „zurückgedreht“ werden. Dazu werden die „Before-Images“ der Blöcke aus den Flashback Logs gelesen und mit Hilfe der Archived Redo/Online Logfiles auf den gewünschten Zeitpunkt nach vorn gerollt.

Es ist ein Pendant zum Point-in-Time-Recovery. Sowohl Restore/Recovery als auch Flashback können die gesamte Datenbank auf einen bestimmten Zeitpunkt zurücksetzen. Häufig ist jedoch das Flashback Database schneller, denn er erfolgt auf den vorhandenen Datenbankdateien wohingegen für ein Point-in-Time-Recovery erst ein Restore der Datenfiles erfolgen muss.

Das Limit bezüglich des ältesten Flashback-Zeitpunktes ist der Platz, der für Flashback Logs zur Verfügung steht (Parameter DB_RECOVERY_FILE_DEST_SIZE). Zwar kann über den Parameter DB_FLASHBACK_RETENTION_TARGET die Vorhaltezeit gesetzt werden, wird aber viel geschrieben und der Platz wird eng, dann werden ältere Flashback Logs überschrieben (im Gegensatz zu den Archived Redologs, die niemals überschrieben werden und wo ein Volllaufen der Archive Log Destination zum Stillstand der Datenbank führt).

Mit folgendem Befehl wird Flashback eingeschaltet (bei Multitenant im Root-Container):

alter database flashback on;
-- weiter gehts in der PDB (ab 12.2. ist es möglich, allein die PDB „zu flashbacken“)
conn sys/***@pdb1 as sysdba
select * from scott.t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 18:41:07 initial
         2 18.08.19 18:41:07 initial
         3 18.08.19 18:41:07 initial

drop table scott.t1 cascade constraints;
select * from scott.t1;
                     *
ERROR at line 1:
ORA-00942: table or view does not exist
select * from v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_ RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE     CON_ID
-------------------- ----------------- ---------------- -------------- ------------------------ ----------
             2125201 18.08.19 18:42:23             1440      419430400                        0          0
alter pluggable database pdb1 close;
flashback pluggable database pdb1 to scn 2125201;
alter pluggable database pdb1 open resetlogs;
select * from scott.t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 18:41:07 initial
         2 18.08.19 18:41:07 initial
         3 18.08.19 18:41:07 initial

Flashback Database kann auch Standby Datenbank genutzt werden. Ab Version 19c werden Flashbacks der primären Datenbank automatisch auf der Standby Datenbank nachgezogen. Ebenso ist ein Flashback Database über ein „open resetlogs“ hinweg möglich.

 

Flashback Database – Guaranteed Restore Points

Guaranteed Restore Points nutzen ebenfalls Flashback Logs, der Flashback Modus muss dazu jedoch nicht eingeschaltet sein. Hier ist die Wiederherstellbarkeit der kompletten Datenbank auf den Zeitpunkt des Guaranteed Restore Points – theoretisch - garantiert. Allerdings – Achtung! – hier gibt es eine Stolperfalle. Wird der Platz in der Fast Recovery Area eng, werden die Archive Redolog Dateien, die bereits gesichert wurden, aus der Fast Recovery Area gelöscht. Dies passiert auch dann, wenn sie für die Herstellung des Guaranteed Restore Points eigentlich noch benötigt würden. In so einem Fall müssten also die Archived Redologs erst wieder restored werden, bevor die Datenbank zurückgesetzt werden kann. Der Restore kann natürlich zeitintensiv sein, so dass auch das Flashback entsprechend dauert. Wäre zudem das Backup der Archived Redolog Dateien unglücklicherweise nicht (mehr) verfügbar, kann auch die Datenbank nicht mehr zurückgesetzt werden! Siehe hierzu auch die MOS-Notes 2396155.1 sowie Enhancement Request/Bug 14546872 und Bug 14395635.

Im Fall von Guaranteed Restore Points wird das Image der Blöcke zum Zeitpunkt des Kommandos „create restore point“ in den Flashback Logs gespeichert. Die weiteren Änderungen der Blöcke werden nicht gespeichert – eine lückenlose Wiederherstellung ist somit nicht möglich. Dies ist aber auch gar nicht die Intention von Guaranteed Restore Points. Es eignet sich vielmehr hervorragend, um ein Fallback für Upgrades zu haben, um Testszenarien immer wieder auf demselben Datenstand aufzusetzen oder auch um Batchjobs wieder zurücksetzen zu können. Es können auch mehrere Restore Points gesetzt werden.

conn sys/***@pdb1 as sysdba
select * from scott.t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 18:41:07 initial
         2 18.08.19 18:41:07 initial
         3 18.08.19 18:41:07 initial

create restore point restore_pdb1_20190818 guarantee flashback database;
drop table scott.t1 cascade constraints;
select * from scott.t1;
                     *
ERROR at line 1:
ORA-00942: table or view does not exist

alter pluggable database pdb1 close;
flashback pluggable database pdb1 to restore point restore_pdb1_20190818;
alter pluggable database pdb1 open resetlogs;
select * from scott.t1;

        ID DATUM             KOMMENTAR
---------- ----------------- ------------------------------------------------------------
         1 18.08.19 18:41:07 initial
         2 18.08.19 18:41:07 initial
         3 18.08.19 18:41:07 initial

Der Guaranteed Restore Point kann ebenfalls auf Standby Datenbanken manuell gesetzt werden. Ab 19c werden Restore Points, die auf der primären Datenbank gesetzt sind, auch auf die Standby Datenbanken übertragen. Wird die primäre Datenbank „geflashbackt“, erfolgt diese Aktion automatisiert auch auf der Standby Datenbank.

 

Restriktionen beim Einsatz von Flashback

Alle Wiederherstellungsverfahren unterliegen Restriktionen. Am stabilsten einsetzbar ist hier tatsächlich „Flashback Database“, was allerdings dann nicht zum Einsatz kommen kann, wenn nur einige Tabellen bzw. Daten betroffen sind.

Jedoch insbesondere der Flashback einzelner Objekte aus Undo Tablespace oder dem Recyclebin hat viele, viele Beschränkungen. Sobald von einer „normalen“ Tabelle weggegangen wird, wird es komplex. Constraints oder Indices können vorhanden sein und müssen wiederhergestellt werden. Das Vorhandensein von Triggern, die ihrerseits wiederum Daten manipulieren können, muss berücksichtigt werden. Die Retention Time von LOBs ist separat zu konfigurieren. Bestimmte Datentype können außerhalb von „Flashback Database“ nicht „geflashbackt“ werden. Oft ist ein Flashback nach DDL auf dem Objekt nicht mehr möglich. Oder das DDL ist nicht möglich oder nur sehr mühsam über Zwischenschritte zu erreichen, weil eine Tabelle zum Beispiel einem Flashback Data Archive zugeordnet ist. Fine Grained Access Policies kommen ins Spiel. Mehrere Transaktionen ändern unterschiedliche und auch dieselben Tabellen und beeinflussen sich somit gegenseitig. Niedrigere Oracle Versionen unterliegen oft mehr Limitierungen. All dies muss überprüft werden, wenn ein bestimmtes Verfahren ernsthaft regelmäßig zum Einsatz kommen soll.

Alle Restriktionen an dieser Stelle zu erfassen, sprengt den Rahmen dieses Tipps. Sie müssen dann genauestens untersucht und getestet werden, wenn eine bestimmte Flashbackmethode regelmäßig eingesetzt werden soll.

 

Zusammenfassung

Unter dem Begriff Flashback verbergen sich im Oracle Kontext viele Möglichkeiten, Daten wiederherzustellen. Manche Möglichkeiten sind „out-of-the-box“ vorhanden, manche müssen explizit VOR der Datenänderung konfiguriert werden, um bei Datenverlust mit der entsprechenden Methode die Daten wiederherstellen zu können. Es lohnt sich auf jeden Fall, die Möglichkeiten zu kennen und einige von ihnen auch prophylaktisch zu implementieren, um im Fehlerfall schnell Daten wiederherstellen zu können.

Für Wahl der Wiederherstellungsverfahren sind folgende Fragen entscheidend:

  1. Welche Oracle Edition (SEO, SE2, EE) und welche Optionen sind in meiner Umgebung lizenziert und darf ich das gewünschte Feature damit nutzen?
  2. Wie wurden die Tabellendaten gelöscht (drop table oder delete)?
  3. Wurde nur eine Tabelle gelöscht oder mehrere?
  4. Welche technischen Restriktionen (Datentypen (LOBs, Nested Table, Types, …), abhängige Objekte wie Constraints/Indices/Tabellen, Trigger, Wiederherstellung von SYS-Objekten, angewandte DDLs, …) hat das gewählte Wiederherstellungsverfahren?
  5. Wie hoch ist der Aufwand für Nacharbeiten (zum Beispiel Rename von Indices, Herstellung der Datenintegrität verknüpfter Tabellen (Trigger, Constraints), Aktualisierung/Zurückrollen von LOBs)?

Hier sind noch einmal die betrachteten Flashback-Verfahren in einer Übersicht zu sehen:

null

Ausblick

Es scheint, dass sich bezüglich Flashback nach 11g nichts mehr getan hat. Aber so ist es nicht. Mit 12c treten neue Begriffe in den Vordergrund, die aber viel mit Zeileninhalten zu bestimmten Zeiten zu tun haben. Hier geht es nicht mehr um die Wiederherstellung von Daten aus der Vergangenheit, weil sie falsch geändert wurden. Nein, hier geht es bewusst um Versionierung von Daten zu bestimmten Zeitpunkten. Das Stichwort hierzu ist: Information Lifecycle Management (ILM) und insbesondere Temporal Validity Flashback Queries. Aufbauen tut ILM auf Flashback Data Archives. Das zugehörige Package: DBMS_FLASHBACK_ARCHIVE. Es wird also nicht langweilig.
 

Verwendete Links bzw. zum Weiterlesen

Inderpal S. Johal, „ORACLE FLASHBACK – 9i To 10g”: http://www.datasoftech.com/library/NJOUG_flashback.pdf
Ann Sjökvist, “Flashback on Oracle SE“: https://www.sejustloveit.com/oracle-se-dba/flashback-on-oracle-se/
Pint Dibask, “Ensuring Data Protection Using Oracle Flashback Features - Part 5”: http://oracledbpro.blogspot.com/2016/05/ensuring-data-protection-using-oracle_22.html
Marco Mischke, “Flashback – Recover without Recovery”: https://dbamarco.wordpress.com/2015/06/15/flashback-recover-without-recovery/
Ulrike Schwinn, „Oracle SQL für mehr Funktionalität und Performance“:  https://www.doag.org/formes/pubfiles/8009817/2016-NN-Ulrike_Schwinn-Oracle_SQL_fuer_mehr_Funktionalitaet_und_Performance_-Praesentation.pdf

Anhang

ScriptsTest.txt

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.