Récupération rapide d’une base (Database FLASHBACK RECOVERY)

La récupération rapide d’une base, permet un retour arrière…grace aux images avant modification, à partir de l’état courant. Il ne nécessite pas comme la restauration jusqu’à une date donnée (POINT IN TIME RECOVERY), de sauvegarde des fichiers préalable. La durée de restauration est indépendante de la taille de la base, mais simplement fonction du nombre d’opérations à annuler.
A la différence du FLASHBACK DROP TABLE qui n’a besoin d’aucune ressource optionnelle, le FLASHBACK DATABASE s’appuie sur :
- une zone de récupération (RECOVERY AREA) qui contient des fichiers LOGs supplémentaires spéciaux : les Flashback Database LOGs
- un process de fond spécifique : RVWR (Recovery Writer) qui écrit dans ces LOGs.

note : le mode FLASHBACK DATABASE utilise aussi les redologs file en ligne ou non, et nécessite donc d’être en mode ARCHIVELOG !

Passage en mode FLASHBACK DATABASE

On va préciser les spécifications de la zone de récupération (emplacement et taille) et passer la base en mode FLASHBACK. Pour cette opération la base doit être dans l’état montée non ouverte. Trois paramètres d’initilisation nous seront utiles :

DB_RECOVERY_FILE_DEST : répertoire contenant la zone de récupération (Flashback logs) DB_RECOVERY_FILE_DEST_SIZE : taille en KO(K) ou MO(M) de cette zone DB_FLASHBACK_RETENTION_TARGET : limite supérieure du temps de récupération en minutes (défaut 1440)Les paramètres de récupération rapide, peuvent être visualisés / spécifiés avec la console enterprise manager 10g, onglet ‘maintenance’ lien ‘paramètres de récupération’

flashback_db.jpg

Le passage en mode récupération rapide se fait ensuite avec la commande ‘ALTER DATABASE’ :

SQL> alter database flashback on;

alter database flashback on*ERROR at line 1:ORA-38706: Cannot turn on FLASHBACK DATABASE logging.ORA-38707: Media recovery is not enabled.

exemple d’étapes manuelles :

SQL> –Passage en mode archivage si nécessaire…
SQL> select log_mode from v$database;
LOG_MODE
————
NOARCHIVELOG
SQL> shutdown immediate;
Database shhutdown
SQL> startup mount
ORACLE instance started.
Total System Global Area 499122176 bytes
Fixed Size 2021824 bytes
Variable Size 142607936 bytes
Database Buffers 348127232 bytes
Redo Buffers 6365184 bytes
Database mounted

SQL> alter system archive log start;
System altered.
SQL> alter database archivelog;
Database altered.

SQL> alter database open;
Database altered.
SQL> — passage en mode Flashback
SQL> alter database flashback ON;
Database altered.
SQL> –vérification pour les inquiets…
SQL> SELECT FLASHBACK_ON FROM v$database;
FLASHBACK_ON
————
NO

flashback coté systeme

SQL> show parameter recovery_file_dest
NAME TYPE VALUE
—- —- —–
db_recovery_file_dest string /oracle/10GDB/flash_recovery_a rea
db_recovery_file_dest_size big integer 2G

$ pwd
/oracle/10GDB/flash_recovery_area/PORT64/flashback
oracle@sli-portail-4 flashback]$ ls -l
total 242352
-rw-r—– 1 oracle dba 8200192 mai 3 17:23 o1_mf_25k5pzmz_.flb
-rw-r—– 1 oracle dba 8200192 mai 3 18:00 o1_mf_25klr420_.flb
-rw-r—– 1 oracle dba 4104192 mai 3 18:14 o1_mf_25knwwbz_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 18:51 o1_mf_25koq0w9_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 19:00 o1_mf_25kqw7bf_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 19:15 o1_mf_25krdxhx_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 19:44 o1_mf_25ks9462_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 20:00 o1_mf_25kv0c3h_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 20:21 o1_mf_25kvyobd_.flb
-rw-r—– 1 oracle dba 3989504 mai 3 20:59 o1_mf_25kx567w_.flb

ou l’on voit que les fichiers flashback ont l’extension ‘.flb’ et sont créés de manière relativement régulière, quelle que soit l’activité de la base.

note : la zone de restauration rapide (flashback area) sert à stocker les Flshback logs mais aussi tous les fichiers important de la BD, à savoir :
- datafiles,
- control files,
- redologs files curants,
- redolog files archivés.

Peut on faire la récupération ?

En d’autres terme, est que les FLASHBACK LOGs permettent de ‘remonter’ suffisamment loin dans le temps ?
C’est le paramètre db_flashback_retention_target qui va le déterminer :

SQL> SELECT VALUE/60 “Durée en heures ”
FROM v$PARAMETER
WHERE NAME = ‘db_flashback_retention_target’;

Durée en heures
—————
24

Quels flashback logs sont utiles ? (ceux depuis 9H30 du matin, pour etre sur, par exemple ici ):

select NAME , LOG# , THREAD# ,SEQUENCE#,BYTES ,
TO_CHAR(FIRST_TIME,’DD/MM HH24:MI’) “Modifié à ”
from V$FLASHBACK_DATABASE_LOGFILE
WHERE TO_CHAR(FIRST_TIME,’DD/MM HH24:MI’) >= ‘05/05 09:30′

NAME LOG# THREAD# SEQUENCE# BYTES Modifié à
…/flashback/o1_mf_25m79d8f_.flb 57 1 143 3981312 05/05 09:35
…/flashback/o1_mf_25m95vkq_.flb 58 1 144 3981312 05/05 10:00
…/flashback/o1_mf_25m9nqn0_.flb 59 1 145 3981312 05/05 10:00