SCN donnée (retour dans le passé) • Crée une vue de la base à une date située dans le passé • Il est pratique pour récupérer des données suite à une instruction erronée (Delete from employes et commit) • Utilisé d’une manière transparente et par des sessions concurrentes • Une nouvelle ligne est ajoutée à chaque commit, on pourra ainsi avoir les différentes versions d’une ligne donnée LE FLASHBACK • On peut vérifier l’ éxistance du package DBMS_FLASHBACK (dba_objects) • Pour activer le flashback, il faut : - Mettre le paramètre undo_management à AUTO - Attribuer à undo_retention (secondes) la durée qu’on peut remonter • On doit avoir le droit d’exécuter le package dbms_flashback LE FLASHBACK / Procédures • DBMS_FLASHBACK.ENABLE_AT_TIME : permet d’activer le flashback et de retourner à une image donnée (sysdate - ??) • DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER • DBMS_FLASHBACK.DISABLE : permet de désactiver le flachback et de retourner au présent FALSHBACK / VERSIONS • On peut avoir les versions d’une ligne donnée (la liste des modifications) en utilisant la clause VERSIONS BETWEEN (SCN ou TIMESTAMP) (générés par des commit) Exemple SELECT x, y, z FROM table1 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE On peut utiliser l’une des deux syntaxes : – VERSIONS BETWEEN TIMESTAMP [lower bound] AND [upper bound]; ou – VERSIONS BETWEEN SCN [lower bound] AND [lower bound]. versions pseudo-colonnes • C’est la liste des colonnes qu’on peut utiliser avec le flashback versions – VERSIONS_STARTTIME – VERSIONS_STARTSCN – VERSIONS_ENDTIME – VERSIONS_ENDSCN – VERSIONS_XID (ID de la transaction) – VERSIONS_OPERATION (I,U,D) flashback_transaction_query • Une nouvelle vue est proposée par oracle permettant de lister les versions d’une donnée • Contient par exemple la requête nécessaire à l’annulation de la transaction Flashback Query /AS OF clause • Pour récupérer des données à partir du passé on peut aussi utiliser l’une des commandes : – AS OF TIMESTAMP <timestamp> ou – AS OF SCN <SCN> Exemple INSERT INTO EMPLOYEE_TEMP (SELECT * FROM EMPLOYEE AS OF TIMESTAMP ('13-SEP-04 8:50:58','DD-MON-YY HH24: MI: SS‘) FLASHBACK / TABLE • Pour activer le flashback niveau table il faut : - Activer l’option row movement sur la table ALTER TABLE <table> ENABLE ROW MOVEMENT; - Avoir le privilège système FLASHBACK ANY TABLE ou le privilège objet FLASHBACK object - Avoir les privilèges SELECT, INSERT, UPDATE et DELETE sur la table FLASHBACK TABLE EMP TO TIMESTAMP <timestamp> FLASHBACK TABLE EMP TO SCN <scn> N.B Les fonctions TIMESTAMP_TO_SCN et SCN_TO_TIMESTAMP permettent de déterminer la valeur de l’SCN à une date donnée et inversement RecycleBin • Contenaire logique de toutes les tables supprimés • Quand une table est supprimée la base l’enregistre afin de la réutiliser (y compris les indexes, les contraintes et les triggers) • Ces objets seront à la corbeille jusqu’à ce qu’ils seront purgés • On peut explicitement purger un objet à travers sqlplus • La commande show recyclebin permet de visualiser les objets supprimés • Vues du dictionnaire USER_RECYCLEBIN, DBA_RECYCLEBIN RecycleBin • Show parameter recyclebin
• Show recyclebin Restauration d’une table • Pour restaurer à partir du recycle, on utilise la commande : FLASHBACK TABLE <nom de la table> TO BEFORE DROP
• On peut renommer la table en la restaurant
FLASHBACK TABLE "BIN$KSD8DB9L345KLA==$0" TO BEFORE DROP RENAME TO <Nouveau nom>;
Avec cette option de renommage on pourra restaurer toutes les
versions d’une table PURGE TABLE • PURGE TABLE permet de purger une table ainsi que tous ses objets (contraintes, indexes et triggers) PURGE TABLE <nom de la table>;
PURGE TABLE "BIN$KSD8KJJUH45KLA==$0";
Si on a supprimé plusieurs versions d’une table, purge table <nom de la table> supprimera les tables selon l’ordre FIFO • PURGE TABLESPACE permet de purger tous les tables supprimés (ainsi que leurs dépendances) d’un tablespace donné • PURGE DBA_RECYCLEBIN permet de purger tous les objets à partir du recycle