FLASHBACK DATABASE
Depuis la version Oracle 10g, il est possible de définir une base de données en mode « FLASHBACK », ce qui vous permet, en cas d’erreur humaine majeure, de remettre la base dans un état antérieur à l’erreur. Cette fonctionnalité gère les conservations de modifications en sauvegardant les blocs « UNDO » lorsqu’’ils sont entrés dans la période « UNDO_RETENTION », comme les fichiers journaux sont sauvegardés dans les fichiers de journaux archivés. La base de données est en mode « FLASHBACK » ; vous pouvez visualiser l’état de votre base en interrogeant les vues : « V$DATABASE » et « V$FLASHBACK_DATABASE_STAT ».
SYS@agate>select begin_time, end_time ,flashback_data flashback,
2 db_data db, redo_data redo, estimated_flashback_size estimated
3 from v$flashback_database_stat;
BEGIN_TI END_TIME FLASHBACK DB REDO ESTIMATED
-------- -------- ---------- ---------- ---------- ----------
16/03/14 16/03/14 11034624 17481728 5747200 0
SYS@agate>select dbid, name, flashback_on, current_scn from v$database;
DBID NAME FLASHBACK_ON CURRENT_SCN
---------- -------- ------------------ -----------
904870336 AGATE YES 12679583
La syntaxe de la commande « FLASHBACK DATABASE » est comme suit :
FLASHBACK DATABASE TO [BEFORE]
{{ SCN | TIMESTAMP} valeur | RESTORE POINT nom };
La commande « FLASHBACK DATABASE » ne peut pas restaurer les fichiers effacés ou perdus, de même elle ne va pas dimensionner les fichiers comme dans leur état antérieur. Dans le cas de perte des fichiers, la commande « FLASHBACK DATABASE » peut restaurer les fichiers existants et pour les autres il va falloir exécuter leur restauration à l’aide des autres outils. Cette démarche est présentée dans le Module « La récupération avancée ».
SYS@agate>select retention_target retention, flashback_size taille,
2 estimated_flashback_size estimation , oldest_flashback_scn scn,
3 to_timestamp(oldest_flashback_time) temp
4 from v$flashback_database_log;
RETENTION TAILLE ESTIMATION SCN TEMP
---------- ---------- ---------- ---------- -----------------------
7200 95649792 1296875520 12675380 16/03/14 00:00:00
SYS@agate>select group# g, sequence# s, member
2 from v$logfile join v$log using (group#);
G S MEMBER
--- --- ------------------------------------------------------------
1 186 C:\APP\ORACLE\ORADATA\AGATE\ONLINELOG\O1_MF_1_64056DH2_.LOG
2 187 C:\APP\ORACLE\ORADATA\AGATE\ONLINELOG\O1_MF_2_64056XWR_.LOG
...
SYS@agate>create restore point point_rest01 guarantee flashback database;
Point de restauration créé.
SYS@agate>select dbid, name, flashback_on, current_scn from v$database;
DBID NAME FLASHBACK_ON CURRENT_SCN
---------- -------- ------------------ -----------
904870336 AGATE YES 12715156
SYS@agate>drop user stag cascade;
Utilisateur supprimé.
SYS@agate>shutdown immediate
...
SYS@agate>flashback database to restore point point_rest01;
Flashback terminé.
SYS@agate>alter database open resetlogs;
Base de données modifiée.
SYS@agate>select group# g, sequence# s, member
2 from v$logfile join v$log using (group#);
G S MEMBER
--- --- ------------------------------------------------------------
1 1 C:\APP\ORACLE\ORADATA\AGATE\ONLINELOG\O1_MF_1_64056DH2_.LOG
2 0 C:\APP\ORACLE\ORADATA\AGATE\ONLINELOG\O1_MF_2_64056XWR_.LOG
...
SYS@agate>select count(*) from stag.commandes;
COUNT(*)
----------
830
La restauration de la base au point de restauration à été exécutée ; dans l’exemple, on utilise le point de sauvegarde, mais le « SCN=12715156 » peut être également utilisé.
Le FLASHBACK et RMAN
La base de données est en mode « FLASHBACK » et vous pouvez visualiser l’état de votre base en interrogeant les vues : « V$DATABASE » et « V$FLASHBACK_DATABASE_STAT ».
SYS@agate>select begin_time, end_time ,flashback_data flashback,
2 db_data db, redo_data redo, estimated_flashback_size estimated
3 from v$flashback_database_stat;
BEGIN_TI END_TIME FLASHBACK DB REDO ESTIMATED
-------- -------- ---------- ---------- ---------- ----------
04/08/10 04/08/10 3424256 1867776 1866752 0
04/08/10 04/08/10 7716864 11231232 4640768 670531584
SYS@agate>select dbid, name, flashback_on, current_scn from v$database;
DBID NAME FLASHBACK_ON CURRENT_SCN
---------- -------- ------------------ -----------
907225745 AGATE YES 449670
SYS@agate>select tablespace_name, file_id from dba_data_files;
TABLESPACE_NAME FILE_ID
------------------------------ ----------
...
DTP_STAR 5
ITP_STAR 6
DTP_TRAN 7
...
SYS@agate>drop tablespace DTP_TRAN including contents;
Tablespace supprimé.
SYS@agate>drop tablespace DTP_STAR including contents;
Tablespace supprimé.
SYS@agate>shutdown immediate;
SYS@agate>startup mount;
Instance ORACLE lancée.
...
Base de données montée.
SYS@agate>flashback database to scn 449670;
Flashback terminé.
SYS@agate>alter database open resetlogs;
Base de données modifiée.
SYS@agate>select tablespace_name, file_id f, file_name from dba_data_files;
TABLESPACE_NAM F FILE_NAME
-------------- -- --------------------------------------------------
...
DTP_STAR 5 C:\APP\ORACLE\PRODUCT\11.2.0\DB_HOME\DATABASE\UNNAMED00005
ITP_STAR 6 +GD_DONNEES/agate/datafile/itp_star.272.726021505
DTP_TRAN 7 C:\APP\ORACLE\PRODUCT\11.2.0\DB_HOME\DATABASE\UNNAMED00007
...
La syntaxe de la commande « FLASHBACK DATABASE » est comme suit :
FLASHBACK DATABASE {
TO {{SCN|TIMESTAMP} valeur | RESTORE POINT nom_point}
| TO BEFORE {{SCN|TIMESTAMP} | RESETLOGS}};
La commande « FLASHBACK DATABASE » ne peut pas restaurer les fichiers effacés ou perdus ; de même elle ne va pas dimensionner les fichiers comme dans leur état antérieur. Dans le cas de perte des fichiers, la commande « FLASHBACK DATABASE » peut récupérer les fichiers existants, et pour les autres il va falloir exécuter leur restauration à l’aide de RMAN.
C:\>rman target sys/P#sw0rd3@agate catalog rman/rman@saphir
connecté à la base de données cible : AGATE (DBID=907225745)
connecté à la base de données du catalogue de récupération
RMAN> spool log to recover_until.txt append
RMAN> run {
2> set newname for datafile 5 to new;
3> set newname for datafile 7 to new;
4> restore datafile 5,7;
5> switch datafile all;
6> recover datafile 5,7;
7> sql 'ALTER DATABASE datafile 5 online';
8> sql 'ALTER DATABASE datafile 7 online';}
RMAN> spool log off
RMAN> report schema;
Etat du schéma de base de données dont le db_unique_name est AGATE
Liste des fichiers de données permanents
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 700 SYSTEM YES +GD_DONNEES/agate/datafile/system.265.726012381
2 600 SYSAUX NO +GD_DONNEES/agate/datafile/sysaux.266.726012395
3 300 UNDOTBS1 YES +GD_DONNEES/agate/datafile/undotbs1.267.726012403
4 5 USERS NO +GD_DONNEES/agate/datafile/users.269.726012417
5 640 DTP_STAR NO +GD_DONNEES/agate/datafile/dtp_star.271.726117555
6 640 ITP_STAR NO +GD_DONNEES/agate/datafile/itp_star.272.726021505
7 640 DTP_TRAN NO +GD_DONNEES/agate/datafile/dtp_tran.273.726117555
8 640 ITP_TRAN NO +GD_DONNEES/agate/datafile/itp_tran.274.726021525
9 50 CATALOGUE_RMAN NO +GD_DONNEES/agate/datafile/catalogue_rman.275.726052467
Liste des fichiers temporaires
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 429 TEMP 33554431 +GD_DONNEES/agate/tempfile/temp.268.726012407
La restauration et récupération des deux fichiers est exécutée comme la récupération incomplète que vous avez étudiée auparavant. L’avantage de cette méthode est que seuls les deux fichiers ont été restaurés et pas la totalité de la base de données.