@ü.li:Listing 1: Gelöschte Daten ansehen mit Flashback Query @li:SQL> delete from emp; 14 Zeilen gelöscht. SQL> commit; Transaktion mit COMMIT abgeschlossen. SQL> select * from emp as of timestamp (systimestamp - interval '5' minute); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ------------------- ----- ----- ------ 7369 SMITH CLERK 7902 17.12.1980 00:00:00 800 20 7499 ALLEN SALESMAN 7698 20.02.1981 00:00:00 1600 300 30 : : : : : : 7902 FORD ANALYST 7566 03.12.1981 00:00:00 3000 20 7934 MILLER CLERK 7782 23.01.1982 00:00:00 1300 10 14 Zeilen ausgewählt. @ü.li:Listing 2: Undo-Segmente enthalten keine Daten mehr @li:SQL> select * from emp as of timestamp (systimestamp - interval '1' month); select * from emp as of timestamp (systimestamp - interval '1' month) * FEHLER in Zeile 1: ORA-01555: Snapshot zu alt: Rollback-Segmentnummer 10 namens "_SYSSMU10_1197734989$" ist zu klein. @ü.li:Listing 3: Löschaktion rückgängig machen mit Flashback Query @li:SQL> insert into emp (select * from emp as of timestamp (systimestamp - interval '5' minute)); 14 Zeilen erstellt. SQL> commit; Transaktion mit COMMIT abgeschlossen. @ü.li:Listing 4: Die "Datenbankuhr" für eine Sitzung zurückstellen @li:SQL> delete from emp; 14 Zeilen gelöscht. SQL> commit; Transaktion mit COMMIT abgeschlossen. SQL> begin dbms_flashback.enable_at_time(systimestamp - interval '10' minute); end; 2 / PL/SQL-Prozedur erfolgreich abgeschlossen. SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ------------------- ----- ----- ------ 7369 SMITH CLERK 7902 17.12.1980 00:00:00 800 20 7499 ALLEN SALESMAN 7698 20.02.1981 00:00:00 1600 300 30 : : : : : : 7902 FORD ANALYST 7566 03.12.1981 00:00:00 3000 20 7934 MILLER CLERK 7782 23.01.1982 00:00:00 1300 10 14 Zeilen ausgewählt. SQL> begin dbms_flashback.disable; end; 2 / PL/SQL-Prozedur erfolgreich abgeschlossen. @ü.li:Listing 5: Das Flashback-Archiv sichert alle Spalten der Originaltabelle @li:SQL> desc SYS_FBA_HIST_111131 Name Null? Typ ----------------------------------------- -------- ---------------------------- !!!Farbe!!!RID!!!Farbe!!! VARCHAR2(4000) !!!Farbe!!!STARTSCN!!!Farbe!!! NUMBER !!!Farbe!!!ENDSCN!!!Farbe!!! NUMBER !!!Farbe!!!XID!!!Farbe!!! RAW(8) !!!Farbe!!!OPERATION!!!Farbe!!! VARCHAR2(1) EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) @ü.li:Listing 6: Flashback-Archivtabellen schützen vor versehentlichen Änderungen @li:SQL> delete from SYS_FBA_HIST_111131; delete from SYS_FBA_HIST_111131 * FEHLER in Zeile 1: ORA-55622: DML-, ALTER- und CREATE UNIQUE INDEX-Vorgänge sind auf Tabelle "SCOTT"."SYS_FBA_HIST_111131" nicht zulässig @ü.li:Listing 7: Flashback Drop bringt gelöschte Tabellen zurück @li:SQL> alter table emp no flashback archive; Tabelle wurde geändert. SQL> drop table emp; Tabelle wurde gelöscht. SQL> select * from emp as of timestamp (systimestamp - interval '1' minute); select * from emp as of timestamp (systimestamp - interval '1' minute) * FEHLER in Zeile 1: ORA-00942: Tabelle oder View nicht vorhanden SQL> flashback table emp to before drop; Flashback abgeschlossen. SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ------------------- ----- ----- ------ 7369 SMITH CLERK 7902 17.12.1980 00:00:00 800 20 7499 ALLEN SALESMAN 7698 20.02.1981 00:00:00 1600 300 30 : : : : : : 7902 FORD ANALYST 7566 03.12.1981 00:00:00 3000 20 7934 MILLER CLERK 7782 23.01.1982 00:00:00 1300 10 @ü.li:Listing 8: Dictionary View zeigt Objekte im Recylcebin @li:SQL> select object_name, original_name, droptime from user_recyclebin; OBJECT_NAME ORIGINAL_NAME DROPTIME ------------------------------ --------------- ------------------- BIN$Gur5exxZSd7gU+L0pQrG8w==$0 DEPT 2015-07-15:15:31:39 BIN$Gur5exxaSd7gU+L0pQrG8w==$0 BONUS 2015-07-15:15:31:39 BIN$Gur5exxgSd7gU+L0pQrG8w==$0 EMP 2015-07-15:15:59:49 @ü.li:Listing 9: Tabellen mit neuem Namen wiederherstellen @li:SQL> drop table emp; Tabelle wurde gelöscht. SQL> create table emp (spalte number); Tabelle wurde erstellt. SQL> flashback table emp to before drop; flashback table emp to before drop * FEHLER in Zeile 1: ORA-38312: Originalname wird von einem bestehenden Objekt benutzt SQL> flashback table "BIN$Gur5exxgSd7gU+L0pQrG8w==$" to before drop rename to emp_old; Flashback abgeschlossen. @ü.li:Listing 10: Datenbank schließen, zurückfahren und öffnen @li:SQL> shutdown immediate; SQL> startup mount; SQL> flashback database to timestamp (systimestamp - interval '1' day); SQL> alter database open read only; @ü.li:Listing 11:Restore Points helfen beim Zurückstellen der Datenbank @li:SQL> create restore point noch_alles_ok; SQL> begin 2 start_complex_batch_script; 3 end; 4 / SQL> flashback database to restore point 'noch_alles_ok'