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 :
- Se connecter à sqlPlus et faire un shutdown immediate
- Monter la base de données
- Mettre la base en mode archivelog
- 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?