FLASHBACK DROP

L'istruzione FLASHBACK è utilizzato per
  • recuperare oggetti, dati e dipendenze tra oggetti;
  • recuperare tabelle droppate per errore;
  • recuperare dati manipolati con una serie di DML;
  • confrontare dati in intervalli di tempo differenti.
Durante l'operazione di flashback drop, tutte le tabelle impattate vengono poste in modalità exclusive dml locks.
L'istruzione flashback drop esegue il restore della tabella dal Recycle Bin compreso i dati, gli indici, i privilegi concessi e le constraint ad eccezione delle foreign key.
Non usa gli undo.
Non è necessario abilitare la modalità flashback database.

FLASHBACK TABLE nome_tabella1, nome_tabella2,. TO BEFORE DROP [RENAME TO nome_tabella];

L'opzione RENAME TO serve per assegnare alla tabella droppata un nuovo nome.
  • Non è possibile effettuare il Rollback di una istruzione FLASHBACK TABLE.
  • L'istruzione FLASHBACK TABLE deve essere considerata come un singola statement perché se in una stessa sessione vengono recuperate due tabelle ma per un qualche motivo va in errore il flashback della seconda tabella, anche la prima non sarà recuperata.
  • L'istruzione FLASHBACK TABLE recupera i dati dal tablespace di undo.
  • Se viene droppata una tabella e ricreata un nuova tabella con lo stesso nome della precedente e successivamente droppata,  l'istruzione Flashback Table recupera solo l'ultima tabella droppata. La prima resta nel RecycleBin. Viene applicata la regola LIFO: last in first out.


Non si può recuperare una tabella dal recyclebin se è esistente nel db.

DROP TABLE hr.emp_1;



CREATE TABLE emp_1 as select * from HR.DEPARTMENTS;



DROP TABLE emp_1;

Nel cestino abbiamo le due tabelle con i propri naming convention.

select * from RECYCLEBIN where original_name = 'emp_1';

select * from "BIN$HWUbLsqMRhSJjgSErzcT3A==$0";
select * from "BIN$OCn3NqE2QOixBOL1+MV0fg==$0";

Eseguendo l'istruzione seguente verrà recuperata la seconda tabella droppata.

FLASHBACK TABLE emp_1 TO BEFORE DROP;

select * from emp_1;



Se si esegue nuovamente una query nel Recyclebin compare solo la prima tabella con nome BIN$HWUbLsqMRhSJjgSErzcT3A==$0

select * from RECYCLEBIN where original_name = 'emp_1';

Se ora tentiamo di recuperare la suddetta tabella, compare il seguente errore Oracle.
FLASHBACK TABLE emp_1 TO BEFORE DROP;

Errore SQL: ORA-38312: il nome originale è utilizzato da un oggetto esistente
38312. 00000 -  "original name is used by an existing object"
*Cause:    An attempt was made to recover an object preserving the original
           name, but that name is taken up by some other object.
*Action:   use the RENAME clause to recover the object with a different
           name.

Per recuperare la prima tabella droppata occorre rinominarla.
FLASHBACK TABLE emp_1 TO BEFORE DROP RENAME TO  emp_1_old;



Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database