FLASHBACK QUERY

Le operazioni Flashback Query utilizzano gli Undo data per poter visualizzare modifiche fatte ad una tabella (delete, update, insert) in un istante di tempo.
Esso restituisce solo dati che hanno subito una commit, pertanto i valori vecchi vengono mantenuti per un tempo determinato da parametro undo retention.

Viene utilizzato per
- recuperare dati committati per errore
- confrontare valori  attuali con quelli passati
- correggere errori utente
Inoltre è una operazione che può usare un qualsiasi user con i privilegi di flashback e select.

E s e m  p i o
Sessione#1

select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100;

                    

update EMP_1 set DEPARTMENT_NAME ='Sales'  where DEPARTMENT_ID = 100;
select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100;



Sessione#2
select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100;


Se la Sessione#1 esegue il commit la Sessione#2 visualizzerà il valore "Sales".  

Sessione#1
Commit;

Sessione#2
select DEPARTMENT_NAME from EMP_1 where DEPARTMENT_ID = 100;




Se eseguiamo la seguente Flashback Quey di 3 minuti fa otteniamo come risultato "Finance" perché i dati sono ancora nell'Undo.

SELECT  department_name 
FROM emp_1 
AS OF TIMESTAMP SYSDATE - (3/1440)
where DEPARTMENT_ID = 100;


Oppure, avendo eseguito la commit in data 08/07/2016 12:39 usare la funzione TO_TIMESTAMP.

SELECT  department_name 
FROM emp_1 
AS OF TIMESTAMP TO_TIMESTAMP('2016-07-08 12:39:00', 'YYYY-MM-DD HH:MI:SS')
where DEPARTMENT_ID = 100;

A questo punto è possibile recuperare il vecchio valore con un update

update emp_1  set department_name  = (
SELECT  department_name 
FROM emp_1 
AS OF TIMESTAMP TO_TIMESTAMP('2016-07-08 12:39:00', 'YYYY-MM-DD HH:MI:SS')
where DEPARTMENT_ID = 100
);

Oppure eseguire una insert se era stata effettuata una delete.



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