Sauvegarde avec RMAN (Recovery Manager)

Publié le 30 avril 2012 par Lolokai @lolokai

Introduction

Après deux articles sur un logiciel de sauvegarde/restauration à savoir Bacula , je me suis dis pourquoi ne pas continuer sur ce  thème mais dans le cadre des technologies Oracle.

Cet article n’est pas forcément destiné au novice dans le sens où il faut déjà avoir une connaissance minimum sur l’architecture Oracle. Je tiens à dire avant de commencer que nous n’allons pas traiter tous les cas possibles (il faudrait en effet plus d’un article pour y arriver).

Tout au long de ce billet , je vais dans un premier temps vous faire une présentation rapide de RMAN , puis dans un deuxième temps nous allons passer à la partie pratique , alors par pratique j’entends le fait de créer notre environnement de sauvegarde et de lancer une sauvegarde complète de notre base de données , puis en dernier lieu nous verrons assez rapidement quelques types de sauvegardes possible avec RMAN , des solutions sur un ou deux problèmes que j’ai moi même rencontré lors de mon test.

Présentation de RMAN

Recovery Manager plus communément abrégé en RMAN est un programme standard de la base de données Oracle depuis la version 8i. Nous utiliserons dans ce chapitre les lignes de commande mais il est bon de savoir que RMAN peut être utilisé avec une interface web via OEM.

RMAN compte un certains nombres de composants tels que la base de données à sauvegarder (base cible) , le catalogue de récupération , la zone de récupération flash….

Bon  à savoir :

Il faut savoir que le catalogue de récupération est un composant optionnel de RMAN , cependant je vous conseille de l’utiliser car non seulement il stocke les informations relatives aux différents sauvegardes mais il peut aussi stocker des scripts et conserver une copie du fichier de contrôle d’une base cible.

La zone de récupération simplifie les opérations de sauvegardes et restaurations sur disque. Une fois la stratégie de conversation définie (window/ redundancy ), RMAN se charge automatiquement de supprimer les sauvegardes obsolètes (plus d’informations dans la deuxième partie).

Rman en pratique : Sauvegarde complète de la notre base de données ORCL

Ici toutes les commandes  sont faites par l’utilisateur « oracle » , notre base de données cible à pour SID « ORCL ».

Nous allons dans un premier temps créer notre catalogue

  • Créer notre tablespace et un utilisateur avec les droits

$ sqlplus /nolog

$ connect /as sysdba

SQL> create tablespace rman

2  datafile ‘/u01/app/oracle/oradata/ORCL/rman01.dbf’

3   size 10m autoextend on next 5m ;

Tablespace created.

SQL> create user rman identified by rmanpwd  default tablespace rman ;

User created  

SQL> grant connect , resource , recovery_catalog_owner to rman ;

Grant succeded.

  • Maintenant que le tablespace et l’utilisateur sont créés, nous allons créer le catalogue.
  • On se connecte au catalogue « vierge »

$ rman catalog rman/rmanpwd@orcl

connected to recovery catalog database

recovery catalog is not installed

RMAN> create catalog ;

Recovery catalog created.

  • Nous allons maintenant enregistrer notre base de données ORCL dans le référentiel (rman target / catalog UtilisateurRman@SidBaseCible)

$ rman target / catalog rman@orcl

#(un mot de passe vous sera demandé , c’est le mot de passe de l’utilisateur rman dans notre cas rmanpwd)

RMAN> register database ;

database registered in recovery catalog

starting full resync of recovery catalog

full resync complete

Maintenant que tout cela est fait , il nous faut configurer certains paramètres RMAN (dont les fameux window et redundancy vu à l’introduction)

  • Dans un premier temps , allons lister tous les paramètres avec la commande show all:

RMAN> show all ;

======================================================================

RMAN configuration parameters for database with db_unique_name ORCL are:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 1 DAYS;

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’;

CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default

CONFIGURE ENCRYPTION ALGORITHM ‘AES128′; # default

CONFIGURE COMPRESSION ALGORITHM ‘BASIC’ AS OF RELEASE ‘DEFAULT’ OPTIMIZE FOR LOAD TRUE ; # default

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/home/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f’; # default

======================================================================

  • Configuration stratégie de conservation :

On a deux méthodes pour la conservation des sauvegardes, d’une part on a la méthode dit « fenêtre de récupération » ou « window » cela permet de régler le délais d’expiration des sauvegardes en nombre de jours .(methode utilisée dans notre cas)

RMAN> configure retention policy to recovery windows of 7 days ;

Dans notre cas , les sauvegardes datant de plus de 7 jours seront marquées comme obsolètes et supprimer par RMAN si besoin d’espace est.

La deuxième méthode dit « redondance » ou « redundancy » se base pas sur le temps mais sur le nombre de jeux de sauvegardes.

RMAN> configure retention policy to redundancy = 3 ;

Dans ce cas là , tous les jeux de sauvegardes (fichiers identiques…) seront obsolètes sauf les 3 jeux de sauvegardes les plus récents.

  • Sauvegarde du fichier de contrôle:

En raison de l’importance du fichier de contrôle , il serait judicieux de le sauvegarder lors de chaque backup  et de le mettre pourquoi pas dans un dossier spécifique. Pour ce faire dans un premier temps nous allons créer le dossier qui recevra le fichier de contrôle avec l’utilisateur root et donner tous les droits à l’utilisateur oracle puis nous allons configurer au niveau de RMAN.

#mkdir  -p /save/rman

#chown –R oracle /save/rman

#chgrp –R dba /save/rman

$ rman target / catalog rman/rmanpwd@orcl

RMAN> configure controlfile autobackup on ;

RMAN> configure controlfile autobackup format for device type disk to ‘/save/rman/cf%F’ ;

  • Allons faire en sorte de compresser nos sauvegardes.

Lors d’une opération de restauration ou de récupération les fichiers seront automatiquement décompressés.

RMAN> configure device type disk backup type to compressed backupset ;

Les Sauvegardes <==

  • Sauvegarde complète de notre base de données : ORCL

Dans notre sauvegarde nous allons copier tous les fichiers de la base y compris le SPFILE vers la zone de récupération flash ( je vais vous montrer par la suite un moyen de savoir où se trouve la zone en question)

RMAN> backup as backupset database spfile ;

après quelques temps vous aurez deux lignes du genre « Finished backup at … » et « Finished Control File and SPFILE Autobackup at … »

Maintenant il faut qu’on assure la présence d’archives redo pour les transactions notamment ceux survenus lors de l’opération de sauvegarde, cela nous garanti la récupération de média après la restauration de cette sauvegarde.

RMAN> sql ‘alter system archive log current’ ;

Voir où se trouve la zone de récupération flash, lancez la commande avec l’utilisateur system :

SQL > show parameter db_recovery_file_dest

Ici on voit que le dossier est : /u01/app/oracle/flash_recovery_area

Regardons un peu dans le dossier

D’autres fonctionnalités avec RMAN

Il faut savoir qu’il existe plusieurs types de sauvegardes. Je vais vous parler de quelques-uns avec les commandes adéquates sans pour autant rentrer dans le vif du sujet.

Sauvegarde de tablespace

voir tous les tablespaces disponibles

Sauvegarder:

RMAN> backup as backupset tablespace rman ;

Sauvegarde de fichiers de données :

voir les fichiers de données

Sauvegarder:

RMAN> backup as backupset datafile ‘/u01/app/oracle/oradata/orcl/users01.dbf ‘

  • Sauvegarder tous les fichiers redo archivés

RMAN> backup archivelog all ;

  • Sauvegarde incrémentale

Au lieu de faire des sauvegardes compléte , on peut faire des sauvegardes incrémentales. La première sauvegarde incrémentale doit être de niveau zero , il faut la voir comme une sauvegarde complète puis par la suite on aura des sauvegardes de niveau 1 qui seront soit différentielle par défaut ou cumulatives. La différence c’est que la différentielle agit selon la dernière sauvegarde incrémentale alors que la cumulative agit selon la sauvegarde incrémentale initiale (celle du niveau 0)

  • Sauvegarde incrémentale de niveau 0 + compression :

RMAN> backup incremental level 0   as compressed backupset datanase ;

  • Sauvegarde incrémentale de niveau 1+ compression (par défaut différentielle):

RMAN> backup as compressed backupset  incremental level 1 datanase ;

  • Sauvegarde incrémentale de niveau 1 cumulative + compression :

RMAN> backup as compressed backupset  incremental level 1 cumulative datanase ;

  • Valider nos sauvegardes

Il serait bien de vérifier que nos sauvegardes ne présentent pas d’altérations, pour se faire voici quelques exemples de vérifications.

  • Validation de la base entière et les fichier redo archivés

RMAN> backup validate database archivelog all ;

  • Vérifier qu’une restauration sera fait sans problèmes

RMAN> restore validate database ;

  • Erreurs rencontrées

Je ne vais pas vous cacher que j’ai appris seul l’utilisation de l’utilitaire RMAN, donc j’ai rencontré quelques problèmes lorsque j’ai dû pratiquer. L’une des erreurs  rencontrées est l’erreur :

ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode

Pour résoudre :

  1. Se connecter à sqlPlus et faire  un shutdown immediate
  2. Monter la base de données
  3. Mettre la base en mode archivelog
  4. Ouvrir la base de données

Conclusion

Nous venons de voir à travers cet article  ce qu’est l’utilitaire RMAN , nous avons fait ensemble une sauvegarde complète  , vu quelques astuces…

Comme je l’ai dit dans l’introduction, en aucun cas cet article a traité TOUS les aspects et options fournis par RMAN mais au niveau sauvegarde j’ai essayer d’être le plus complet possible. Il faut savoir qu’oracle fourni un autre utilitaire pour les sauvegardes/restaurations,  le Data Pump Export And Import qui fera peut-être l’objet d’un article futur.

En tant qu’administrateur ou autre avez vous déjà utilisé RMAN ? Dans quel cas ?

Quelles options ou méthodes préférez-vous?