FLASHBACK DEPEND ON UNDO DATA


-conditions:
UNDO_MANAGEMENT=AUTO
UNDO_RETENTION=900 #(in seconds 900 equal 15min, if value is extended UNDO tablespace will be increased also)
only for DML because FLASHBACK use data directory, but DDL cause ORA-01466
only for DELETE because TRUNCATE are not write in UNDO tablespace
recover delete rows:

INSERT INTO [table] (SELECT * FROM [table] AS OF TIMESTAMP TO_TIMESTAMP(’2008-01-01 10:00:00′,’YYYY-MM-DD HH24:MI:SS’) MINUS SELECT * FROM [table];

recover table:
FLASHBACK TABLE [table] TO TIMESTAMP TO_TIMESTAMP(’2008-01-01 10:00:00′,’YYYY-MM-DD HH24:MI:SS’);
SELECT versions_xid FROM [table] VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP ( '2008-01-01 08:00:00′,’YYYY-MM-DD HH24:MI:SS’) and to_timestamp ( '2008-01-01 08:10:00′,’YYYY-MM-DD HH24:MI:SS’);
SLECT * FROM flashback_transaction_query WHERE xid = HEXTORAW ('[above’]);

FLASHBACK DEPEND ON FLASHBACK LOGS


– conditions:
SELECT log_mode,flashback_on FROM V$DATABASE;
ARCHIVELOG mode is necessary, in parameter LOG_ARCHIVE_DEST_n

DB_RECOVERY_FILE_DEST #init param for flashback logs space

DB_RECOVERY_FILE_DEST_SIZE #init param for flasback logs size
DB_FLASHACK_RETENTION_TARGET #init param for flashback log time store
STARTUP MOUNT

ALTER DATABASE FLASHBACK ON

recovery:

STARTUP MOUNT
FLASHBACK DATABASE TO TIMESTAMP SYSDATE-1 | TO TIMESTAMP to_timestamp(’2009-09-28 11:00′,’yyyy-mm-dd hh24:mi’) | TO SCN [scn#];
* ALTER DATABASE OPEN READ ONLY;
* check data by SELECT command
* SHUTDOWN IMMEDIATE;
* STARTUP MOUNT;
* ALTER DATABASE OPEN RESETLOGS;
futhermore:
SELECT estimated_flashback_size FROM v$flashback_database_log; #estimate size for flashback logs in Bytes
DB_FLASHBACK_RETENTION_TARGET #estimate depends on present load

SELECT oldest_flashback_scn, oldest_flashback_time FROM v$flashback_database_log; #oldest point which recovery is possible (if you want to chec, delete oldest flashback log and oldest point will change)
SELECT * FROM v$flash_recovery_area_usage;
SELECT * FROM v$recovery_file_dest;

SELECT SCN_TO_TIMESTAMP(10213123) FROM DUAL;


RECYCLEBIN

– delete table:
DROP TABLE [table_name]
– check „recyclebin”
SHOW RECYCLEBIN
– recover
FLASHBACK TABLE [table_name] TO BEFORE DROP;
– delete without „recyclebin”
DROP TABLE [table_name] PURGE;
– purge „recyclebin”
PURGE TABLE [table_name];
PURGE TABLESPACE [ts_name];
PURGE TABLESPACE [ts_name] USER [user];
PURGE RECYCLEBIN
PURGE DBA_RECYCLEBIN;