Oracle propose une fonctionnalité permettant de créer des points de sauvegarde rapides. Cette option est un complément des sauvegardes à chaud par RMAN et optimise des sauvegardes intermédiaires permettant un retour rapide à une situation connue.
Le mécanisme se fonde sur la Flash Recovery Area d’Oracle.
L’une des utilisations possibles d’une telle fonctionnalité est de permettre par exemple de stocker des points intermédiaires de chargement d’une base de données et permettre un retour à n’importe lequel de ces points pour pouvoir rejouer les étapes suivantes de chargement sans avoir à rejouer intégralement un chargement.
Paramétrage
Les paramètres importants sont les suivants :
db_recovery_file_dest_size = 32768M (Définition de la taille de la recovery area de manière à stocker l'intégralité des flashback dont on peut avoir besoin) db_recovery_file_dest = +FRA (Ici, stockage des flashback dans ASM sur le device FRA) alter system set db_recovery_file_dest_size = 32768M scope = both; alter system set db_recovery_file_dest = +FRA scope = both;
Mise en route des mécanismes de flashback database
La commande suivante permet la mise en route des mécanisme de flashback database :
alter database flashback on;
Restore point « garanti »
Un point de restore garanti est un point de sauvegarde qui n’expire jamais. Il doit être explicitement détruit pour disparaître. Le pendant de cette fonctionnalité est le stockage de tous les fichiers d’archivelogs à partir de ce point garanti. Cette option est donc très consommatrice en espace de stockage à terme. Par contre, elle permet de s’assurer d’avoir à disposition un point de restore sûr dans le temps. Cette fonctionnalité est donc à utiliser avec précaution et uniquement dans des cas où il est indispensable de pouvoir revenir spécifiquement à un point dans le temps pour la base de données (ex : début d’un batch avec commit intermédiaires).
Les points de restore garantis doivent être détruits immédiatement dès qu’ils n’ont plus d’utilité (cf. saturation de l’espace de stockage de la flash recovery area).
Dans SQL*Plus, la commande de création d’un point de restore garanti (privilèges SYSDBA) se fait grâce à la commande suivante :
create restore point <nom du point de restore> guarantee flashback database;
Restore point
Le restore point classique est produit grâce à la commande suivante dans SQL*Plus:
create restore point <nom du point de restore>;
Comment revenir à un point de restore dans le temps ?
La manipulation des points de restore se fait au travers de RMAN. Il faut donc avoir les droits SYSDBA pour pouvoir les manipuler.
Lister les points de restore
[oracle@ora11gr2rac1 ~]$ rman target / Recovery Manager: Release 11.2.0.3.0 - Production on Mon May 23 13:44:49 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ACH11GR2 (DBID=2201030971) RMAN> list restore point all; using target database control file instead of recovery catalog SCN RSP Time Type Time Name ---------------- --------- ---------- --------- ---- 1125821 GUARANTEED 23-MAY-16 AVANT_INSERTION 1126569 23-MAY-16 AVEC_256_LIGNES 1126614 23-MAY-16 AVEC_8192_LIGNES 1127396 23-MAY-16 AVEC_1_LIGNE_TOUT_SUPPRIME
Revenir à un point de restore nommé
L’opération s’effectue en plusieurs étapes :
- Arrêt de l’instance
- Démarrage en mode mount de l’instance
- Flashback de la base de données
- Ouverture de l’instance en resetlogs
Exemple :
[oracle@ora11gr2rac1 ~]$ rman target / Recovery Manager: Release 11.2.0.3.0 - Production on Mon May 23 13:38:29 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ACH11GR2 (DBID=2201030971) RMAN> shutdown immediate using target database control file instead of recovery catalog database closed database dismounted Oracle instance shut down RMAN> startup mount connected to target database (not started) Oracle instance started database mounted Total System Global Area 835104768 bytes Fixed Size 2232960 bytes Variable Size 654314880 bytes Database Buffers 171966464 bytes Redo Buffers 6590464 bytes RMAN> list restore point all; SCN RSP Time Type Time Name ---------------- --------- ---------- --------- ---- 1125821 GUARANTEED 23-MAY-16 AVANT_INSERTION 1126569 23-MAY-16 AVEC_256_LIGNES 1126614 23-MAY-16 AVEC_8192_LIGNES 1127396 23-MAY-16 AVEC_1_LIGNE_TOUT_SUPPRIME RMAN> flashback database to restore point avec_256_lignes; Starting flashback at 23-MAY-16 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=69 device type=DISK starting media recovery archived log for thread 1 with sequence 90 is already on disk as file +FRA/ach11gr2/ archivelog/2016_05_23/thread_1_seq_90.316.912596403 media recovery complete, elapsed time: 00:00:01 Finished flashback at 23-MAY-16 RMAN> sql "alter database open resetlogs"; sql statement: alter database open resetlogs RMAN> exit Recovery Manager complete. [oracle@ora11gr2rac1 ~]$ sqlplus /nolog SQL*Plus: Release 11.2.0.3.0 Production on Mon May 23 13:39:58 2016 Copyright (c) 1982, 2011, Oracle. All rights reserved. SQL> connect test/test Connected. SQL> select count(1) from test1; COUNT(1) ---------- 256
Contrôle de l’espace occupé par les points de restore
L’instruction SQL suivante permet de connaître l’espace pris par les points de restore générés :
SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE FROM V$RESTORE_POINT; NAME SCN TIME DATABASE_INCARNATION# GUA STORAGE_SIZE ------------------------------ ---------- ---------------------------------------- --------------------- --- ------------ AVANT_INSERTION 1125821 23-MAY-16 10.23.43.000000000 AM 1 YES 0 AVEC_7_LIGNES_GARANTIES 1128095 23-MAY-16 01.59.02.000000000 PM 7 YES 52428800 AVEC_256_LIGNES 1126569 23-MAY-16 10.49.50.000000000 AM 1 NO 0 AVEC_8192_LIGNES 1126614 23-MAY-16 10.50.21.000000000 AM 1 NO 0 AVEC_1_LIGNE_TOUT_SUPPRIME 1127396 23-MAY-16 10.51.33.000000000 AM 1 NO 0 AVEC_7_LIGNES 1127910 23-MAY-16 01.56.10.000000000 PM 7 NO 0 6 rows selected.
Point In Time Recovery avec les mécanismes de flashback database
Le mécanisme est identique à un point de restore nommé. Il suffit de définir la date exacte de restore voulue.
Exemple :
[oracle@ora11gr2rac1 ~]$ rman target / Recovery Manager: Release 11.2.0.3.0 - Production on Mon May 23 14:29:19 2016 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ACH11GR2 (DBID=2201030971) RMAN> shutdown immediate using target database control file instead of recovery catalog database closed database dismounted Oracle instance shut down RMAN> startup mount connected to target database (not started) Oracle instance started database mounted Total System Global Area 835104768 bytes Fixed Size 2232960 bytes Variable Size 654314880 bytes Database Buffers 171966464 bytes Redo Buffers 6590464 bytes RMAN> flashback database until time "to_date('23/05/2016 10:51:40','DD/MM/YYYY HH24:MI:SS')"; Starting flashback at 23-MAY-16 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=134 device type=DISK starting media recovery archived log for thread 1 with sequence 90 is already on disk as file +FRA/ach11gr2/ archivelog/2016_05_23/thread_1_seq_90.316.912596403 media recovery complete, elapsed time: 00:00:01 Finished flashback at 23-MAY-16