Oracle – Flashback database


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 :

  1. Arrêt de l’instance
  2. Démarrage en mode mount de l’instance
  3. Flashback de la base de données
  4. 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