Flashback (RMAN)
| Fiche express | |
|---|---|
| Domaine | Retour arrière Oracle (sans restauration) |
| S'appuie sur | SCN et redo logs / archive logs |
| Paramètre clé | UNDO_RETENTION
|
| Voir aussi | RMAN · Récupération (RMAN) |
Flashback regroupe un ensemble de fonctionnalités Oracle permettant de consulter ou de restaurer des données passées sans passer par une restauration RMAN classique. Ces fonctionnalités s'appuient sur les SCN (System Change Number) et les fichiers de journalisation (redo logs / archive logs).
Les commandes disponibles dépendent de la version de la base et de son niveau fonctionnel (database feature level). Le paramètre UNDO_RETENTION doit être correctement dimensionné pour que les données nécessaires soient conservées.
Fonctionnalités couvertes :
- Flashback query : afficher une donnée telle qu'elle était à un instant donné.
- Flashback version query : voir toutes les versions d'une ligne sur un intervalle de temps.
- Flashback transaction query : voir les modifications d'une ligne sur un intervalle de temps.
- Flashback Data Archive (Oracle Total Recall) : conserver sur le long terme toutes les modifications apportées à une table.
- Flashback table : ramener une table dans l'état où elle était.
- Flashback drop : ramener une table dans l'état où elle était juste avant sa suppression.
- Flashback database : ramener la totalité de la base en arrière.
Flashback query
Obtenir le SCN courant via le package DBMS_FLASHBACK (fonction GET_SYSTEM_CHANGE_NUMBER), puis interroger les données à un SCN ou un timestamp donné :
SELECT prenom FROM schema_name AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '30' SECOND WHERE numero = 1 ;
SELECT prenom FROM schema_name AS OF SCN 176032 WHERE numero = 1 ;
UPDATE schema_name SET nom = (SELECT prenom FROM schema_name AS OF SCN 176032 WHERE numero = 1) WHERE numero = 1 ;
Flashback version query
SELECT versions_startscn, versions_endscn, versions_xid, versions_operation, prenom
FROM schema_name VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE numero = 24
ORDER BY versions_startscn ;
Flashback transaction query
SELECT xid, start_scn, commit_scn, logon_user, undo_sql
FROM flashback_transaction_query
WHERE table_name = 'schema_name' AND table_owner = 'schema_name'
AND operation = 'DELETE' AND start_timestamp > SYSDATE - 1 ;
Flashback table
ALTER TABLE schema_name.nom_table ENABLE ROW MOVEMENT ;
FLASHBACK TABLE schema_name.nom_table TO ... ;
Flashback drop
Quand une table est supprimée (DROP TABLE), elle n'est pas totalement effacée : elle est placée dans la corbeille (recycle bin). L'option PURGE permet de la supprimer définitivement.
SHOW RECYCLEBIN ;
SELECT * FROM USER_RECYCLEBIN ;
SELECT * FROM DBA_RECYCLEBIN ;
PURGE TABLESPACE nom_tablespace [USER nom_user] ;
PURGE RECYCLEBIN ;
PURGE DBA_RECYCLEBIN ;
SELECT original_name, object_name, type, ts_name, can_undrop, can_purge
FROM dba_recyclebin WHERE owner = 'schema_name' ;
SELECT owner, table_name, dropped FROM dba_tables WHERE table_name = 'BIN$...' ;
FLASHBACK TABLE schema_name.nom_table TO BEFORE DROP ;
Flashback database
Disponible uniquement en édition Enterprise.
Activer le flashback database :
SHUTDOWN IMMEDIATE ;
STARTUP MOUNT ;
ALTER DATABASE FLASHBACK ON ;
ALTER DATABASE OPEN ;
SELECT flashback_on FROM v$database ;
Paramètres et vue associés :
DB_FLASHBACK_RETENTION_TARGET
V$FLASHBACK_DATABASE_LOG
Exécuter le flashback en SQL :
FLASHBACK DATABASE TO [BEFORE] {TIMESTAMP | SCN} expression ;
FLASHBACK DATABASE TO BEFORE RESETLOGS ;
FLASHBACK DATABASE TO RESTORE POINT nom ;
Ou depuis RMAN :
FLASHBACK DATABASE TO [BEFORE] {TIME | SCN | SEQUENCE} [=] expression ;
FLASHBACK DATABASE TO BEFORE RESETLOGS ;
FLASHBACK DATABASE TO RESTORE POINT nom ;
Exemple complet :
SHUTDOWN IMMEDIATE ;
STARTUP MOUNT ;
FLASHBACK DATABASE TO TIMESTAMP SYSDATE - 1/24 ;
ALTER DATABASE OPEN RESETLOGS ;
Ouvrir ensuite en lecture seule pour vérification si besoin :
ALTER DATABASE OPEN READ ONLY ;
Voir aussi
- RMAN — présentation générale
- Récupération (RMAN) — restauration classique lorsque le flashback ne suffit pas (perte de fichiers, etc.)