RMAN : Sauvegardes à chaud
RMAN permet d’éffectuer la sauvegarde, à froid comme à chaud, de vos bases oracle, en mode total, incrémentiel et/ou cumulatif (nous verrons plus loin ces notions).
Comme indiqué dans le chapitre REFERENTIEL RMAN, RMAN peut utiliser les fichiers de contrôle d’une base de données pour y stoquées les informations utiles pour ses sauvegardes (et donc ses restaurations), mais cela pose de nombreux problèmes en cas de perte de ceux ci. L’altéernative est de stoquer le catalogue dans une database prévue à cet effet (ce que nous vous conseillons).
1 – Nomenclature:
RMAN peut éffectuer de simples copies des fichiers de données, on parle alors de “IMAGE COPY”, ou de gérer l’ensemble des copies qu’il éffectue pour vous dans un format propriétaire nommé “BACKUP SET”.
Une ImageCopy est exactement la même chose que si vous aviez copié des fichiers par l’OS : c’est de loin la meilleure option.
Le BackupSet en revanche permet de ne sauvegarder que les blocs oracles utilisés dans les datafiles, ce qui allège considérablement le poids des sauvegardes avec un rapport de 1/5, ce qui est loin d’être négligeable. De plus, un BackupSet peut être découpé logiquement en plusieurs parties nommées “BACKUP PIECES” ceci pour répondre à des problématiques de limite de stockage (un DBF de 10Go sur une bande de 4Go par exemple).
Rappel: Que cela soit avec RMAN ou un autre outil de sauvegarde, il n’y a pas de miracle, une sauvegarde à chaudd’une database ne peut s’éffectuer QUE si celle si l’archivage des fichiers journaux (archivelogs) est activé, sinon cela n’est pas possible. Une sauvegarde “à chaud”, avec ou sans RMAN, est de toute façon incohérente, il conviendra d’appliquer les journaux archivés aux fichiers de données restaurés pour obtenir une sauvegarde “cohérente”.
2 – Sauvegarde non incrémentale :
Comme vous pouvez vous en douter, BACKUP est l’instruction de RMAN qui va vous permettre d’effectuer une sauvegarde de votre base de données complète ou partielle, full ou incrémentale. Elle vous permet de sauvegarder un fichier de données, un tablespace, la database entière, le spfile et les fichiers de contrôles, les journaux et journaux archivés.
La syntaxe est assez simple : RMAN> BACKUP <ordre> <options>
Les [] symbolisent ici des éléments non obligatoires, les caractères gras les commutateurs les plus habituels en production.
2.1 – Ordres de la commande BACKUP :
[ incremental level <n> [ cumulative] ]
permet les sauvegardes incrémentales de niveau 0 ou 1, avec l’option de cumuler les sauvegardes pour l’amélioration des performances à la restauration
[ validate ]
Doit – on vérifier la sauvegarde après sa génération ?
[ as [ copy | [compressed] backupset ]
Quel est le type de sauvegarde ? (“backup set” recommandé)
[ database | tablespace <ts_name> | datafile <df_name> | current controlfile | spfile ]
que sauvegarder ?
[ archivelog <cible> ]
faut il sauvegarder les archivelogs et où ?
2.2 – Options de la commande BACKUP :
[ include current controlfile ]
généralement à faire, sauve si sauvegarde automatique du CTL file déjà prévue (voir plus loin)
[ plus archivelog ]
à effectuer en mode archivelogs dans le cas des sauvegardes à chaud car c’est indispensable pour obtenir une database cohérente après restauration.
[ delete [ all ] input ]
généralement à effectuer : détruit les archivelogs qui ne sont plus nécessaires
[ format = '<format>' ]
format de la sauvegarde (voir plus loin)
[ tag = '<libelle_de_marqueur>' ]
Très utile : ajouter un tag (marqueur informatif) à une sauvegarde. Il sera possible d’interroger RMAN sur ces tags.
[ not backed up <clause>]
[ ALL | FROM TIME <time> | UNTIL TIME <time> | TIME BETWEEN <t1> AND <t2> ]
Exemples d’utilisation:
Fait un backup de la database et valide que les fichiers sont restaurables:
RMAN> backup validate database tag='full_20080701_2015' plus archivelog delete input;
Fait un backup de la database et des archivelogs si elles n’ont pas été sauvegardées au moins 3 fois:
RMAN> backup database plus archivelog not backed up since 3 times;
Fait un backup des TableSpaces ‘datats’ et ‘indexts’ et backup également les controlfiles et spfiles.
RMAN> backup tablespace datats, indexts include current controlfile;
Fait un backup du datafile #7:
RMAN> backup datafile 7, '/data/madatabase/datafiles/mondbf01.dbf';
Remarque 1 :
Une sauvegarde RMAN est une sauvegarde (intelligente) des fichiers composants la base de données (entre autre les datafiles). Ces fichiers, quel que soit le mode de sauvegarde (database, datafile, …) sont copiés les uns après les autres, il est don cfort à parier que, si la base de données “vie” un minimum, que les fichiers soient positionnés à des SCN différents lors de leur sauvegarde.
Les journaux et les journaux archivés sont alors indispensables lors de la restauration car il faudra pratiquer un recovery après restauration des datafiles pour rendre l’ensemble de la base “cohérente” (cad toutes les en-têtes des fichiers sont de même SCN).
Les commutateurs “PLUS ARCHIVELOG” sont alors strictement nécessaires, nes les oubliez pas !
Remarque 2 : Il est possible de sauvegarder manuellement les archivelogs par la commande “BACKUP ARCHIVELOG ALL’”.
Remarque 3: Nous verrons par la suite qu’il est souvent inutile de préciser certains commutateurs car ceux ci font partie d’une conguration globale de RMAN et sont donc inclus par défaut.
3 – Sauvegarde incrémentale :
Note: Cette option n’existe quà partir du niveai de licence “Enterprise”.
3.1 – Incrémentale basée sur les traçage de blocs indiqué par Oracle :
La sauvegarde incrémentale au sens de RMAN peut appuyer sur la technologie de traçage des blocs modifiésd’une instance Oracle par le moteur de base de données. Cette option activée indique au moteur de base de données qu’il doit spécifier dans un fichier particulier l’ensemble des blocs modifiés depuis l’instant T. Cette liste sera consultée par RMAN dans le cadre d’une sauvegarde incrémentale et celui-ci n’ira alors sauvegardé que les blocs marqués par Oracle comme modifiés dans ce fichier de trace.
Syntaxe:
SQL> database enable block change tracking using file '<chemin_fichier>';
3.2 – Incrémentale basée sur les traçages de blocs non indiqués par Oracle :
Le traçage de blocs Oracle par le moteur de base de données comme indiqué dans 3.1) n’est pas obligatoire pour éffectuer une sauvegarde incrémentale avec RMAN mais, dans ce cas là, celui-ci ne peut pas connaitre la liste exhaustive des blocs modifiés et est obligé de parcourir tous les blocs d’un tablespace afin de déterminer quels sont les blocs modifiés depuis sa dernière sauvegarde.
Le résultat sera exactement le même qu’avace le traçage de blocs Oracle par le moteur de base de données mais les performances s’écroulent : n’hésitez pas à utiliser le traçage de blocs Oracle par le moteur de base de données !
3.3 – Niveau de sauvegarde :
Une sauvegarde incrémentale au sens de RMAN possède un NIVEAU. Le niveau d’une sauvegarde incrémentale indique à RMAN quelle est la sauvegarde de base que celui-ci doit considérer pour évaluer le “delta” avec une situation actuelle à sauvegarder.
- NIVEAU 0 : Même si la sauvegarde est dite incrémentale, le niveau 0 indique en fait à RMAN que tout doit être sauvegardé, même si RMAN ne considère pas une telle sauvegarde comme FULL, elle contient pourtant tous les blocs de la base de données et est restaurable.
- NIVEAU 1 : Si une incrémentale est de niveau 1, alors RMAN ne sauvegardera QUE la différence avec la dernière sauvegarde équivalente de niveau 1 ou de niveau 0 : C’est une sauvegarde différentielle.
Le principe étant de faire régulièrement des sauvegardes de niveau 0 et, périodiquement, des sauvegardes de niveau 1 alors beaucoup plus rapides à éffectuer.
3.4 – Sauvegarde cumulative
Une sauvegarde cumulative est une sauvegarde de niveau 1 qui contient tous les blocs modifiés depuis la dernière sauvegarde de niveau 0, même si des sauvegardes intermédiaires de niveau 1 ont été éffectées.
Ce type de sauvegarde consiste à demander à RMAN de repérer tous les blocs modifiés depuis la dernière sauvegarde de niveau 0, puis de les sauvegarer, une opération qui peut s’avérer lourde si la date de la dernière sauvegarde de niveau 0 est ancienne et que l’activité de la database est importante. Pour réduire ce phénomène, on pourra faire appel au pointage des blocs modifiés par le moteur de base de donnés Oracle et non par RMAN comme indiqué dans 3.1).
L’avantage est évidement : les opérations de restaurations sont beaucoup plus rapides puisque aucunne sauvegarde de niveau 1 non cumulative n’est à appliquer.
La syntaxe générale d’une sauvegarde incrémentale est :
RMAN> BACKUP INCREMENTAL LEVEL [0 | 1 ] [ CUMULATIVE ] <ordre> <option>

