Oracle Flashback Query
Bàsicament es tracta d'un tipus de sql que accedeix a dades que existien a la base de dades en un moment anterior, però que en el moment en què s'executa la sql poden no existir o haver patit modificacions. Per això, Oracle utilitza les dades que queden disponibles durant un temps en el segment de UNDO. Aquest segment, com és sabut, emmagatzema les dades anteriors a una sèrie de modificacions. S'utilitza per assegurar la consistència en la lectura d'una consulta prèvia a la confirmació de les modificacions (commit) i poden ser utilitzats en una possible recuperació (rollback).
sys> grant execute on dbms_flashback to usuari1;
Vegem un exemple. Suposem que volem realitzar una consulta sobre una taula que conté factures de clents i volem accedir a les dades d'un client que prèviament hem esborrat:
sys> select to char (sysdate, 'dd-mm-yyyy hh24: el meu') fecha_sistema from dual;
Mitja hora després executem:
sys> exec dbms_flashback.enable_at_time (to_date ('12-09-2011 12:05, 'DD-MM-YYYY HH24: MI'));
sys> exec dbms_flashback.enable_at_time (to_date ('12-09-2011 12:05, 'DD-MM-YYYY HH24: MI'));
Procediment PL / SQL acabat correctament.
sys> select * from t_facturas where cod_cliente = '00125 ';
... ...
... ...
... ...
... & Hellip;
4 registres seleccionats.
sys> execute dbms_flasback.disable;
sys> select count (*) from t_facturas where cod_cliente = '00125 ';
count (*)
------
0
Es pot obtenir el mateix accedint pel nombre de canvi SCN:
sys> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
1307125
sys> exec dbms_flashback.enable_at_system_change_number (1307125);
Procediment PL / SQL acabat correctament
Existeix també la possibilitat d'utilitzar la sentència 'select ...es of ... ':
sys> select * from t_facturas where cod_cliente = '00125 'es of timestamp to_timestamp ('12-09-2011 12:05', 'DD-MM-YYYY HH24: MI');
sys> select * from t_facturas where cod_cliente = '00125 'es of scn 1.307.125;
Cal tenir en compte que mentre la sessió està en la manera Flashback Query, només podem executar sentències SELECT. Les sentències d'actualització (insert, delete i update) no estan permeses.
En el treball diari amb aquesta opció és útil l'ús de taules temporals per treballar amb les dades recuperades:
sys> create table t_facturas_antes (select * from t_facturas where cod_cliente = '00125 'es of timestamp to_timestamp ('12-09-2011 12:05,' DD-MM-YYYY HH24: MI ');
Altres opcions Flashback Query
- Flashback Version Query: Accés a l'històric de canvis d'una taula.
- Flashback Transaction Query: Accés a l'històric de canvis d'una transacció determinada.
- Flashback Table: Accés a dades anteriors, però per a una única taula.
- Flashback Drop: Recuperar una taula esborrada ('paperera reciclatge').
- Flashback Database: Permet deixar la BBDD tal com es trobava en un temps passat.Similar a restaurar un backup, però amb les limitacions temporals dels processos flashback, encara que molt més ràpid que recuperar la còpia del backup. Cal tenir el mode flashback activat, així com la flash recovery àrea.
Algunes d'aquestes opcions requereixen que el gestor sigui 'Enterprise Edition'.
Es tracta, com s'ha dit, d'una sentència força útil, amb múltiples opcions de "rebobinat" i que ens pot treure de més d'una dificultat.