Oracle et Recovery Manager (RMAN)

Logo

Introduction

Cette note expose la mise en œuvre d’une sauvegarde Oracle gérée depuis l’utilitaire rman. Le détail de toutes les commandes de ce document sont disponibles sur ss64.com : http://www.ss64.com/ora/rman.html.

Rman, acronyme de Recovery MANager est un binaire livré dans les distributions Oracle depuis la version 8.

Il est capable de gérer les sauvegardes d’instances de manière globale - totale ou incrémentale, ou partielle, par tablespace en particulier. Une de ses caractéristique intéressantes est sa capacité à ne sauvegarder que les blocs utilisés, réduisant ainsi la durée de sauvegarde ainsi que la taille de l’objet généré. Un contrôle physique des données sauvegardées est également réalisé.

Ce programme peut fonctionner de manière totalement indépendante. Dans ce cas, tout l’historique et les caractéristiques d’une sauvegarde sont stockés dans les fichiers de contrôle. Il peut s’appuyer également sur un référentiel, appelé catalogue, qui facilite grandement la gestion des sauvegardes et permet quelques opérations supplémentaires. Il s’agit de la méthode étudiée ici.

Le catalogue doit être installé sur une instance dédiée, et peut être partagé par plusieurs bases.

Dans le cas pratique de cette note, l’instance OEMD1ORA est sauvegardée par RMAN. Des cas pratiques de restauration sont proposés.

Cette mise en œuvre technique n’envisage pas la restauration sur une instance Oracle différente (clônage), ceci fera l’objet d’une autre documentation.

Pré-requis

Mode d’archivage

L’instance cible à sauvegarder par RMAN doit être en mode archivelog. La commande archive log list indique si l’instance à sauvegarder par RMAN est en mode archivelog :

OEMD1ORA > sqlplus "/ as sysdba"

archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oem/oracle/OEMD1ORA/archivelog
Oldest online log sequence 1511

Les deux sections qui nous intéressent sont les sections Database log mode , Automatic archival.

  • Si la section 'Database log mode' vaut No Archive Mode, la base de données n’est pas en mode archivelog et la sauvegarde par RMAN ne peut être réalisée. Lorsque la base est en mode archivelog, la section 'Database log mode' vaut Archive Mode.
  • La section 'Automatic Archival' permet de savoir si l’archivage automatique des redo log est activé (Disabled ou Enabled). Lorsque l’archivage automatique est activé (LOG_ARCHIVE_START=TRUE dans le fichier d’initialisation de l’instance), lorsqu’un fichier de redo log est complet, celui-ci est archivé dans le répertoire de destination par un process Oracle ARCx.

Mise en mode archivelog d’une instance Oracle

Pour mettre une base de données en mode archivelog avec archivage automatique, la commande ALTER DATABASE ARCHIVELOG est utilisée et quelques paramètres d’initialisation de l’instance sont modifiés. Dans tous les cas de figure, un redémarrage de l’instance est nécessaire.

Étape 1 : l’instance est stoppée

shutdown immediate;

Étape 2 : les paramètres d’initialisation LOG_ARCHIVE_START, LOG_ARCHIVE_DEST (et éventuellement LOG_ARCHIVE_DUPLEX_DEST) sont mis à jour.

Pour activer l’archivage automatique des fichiers de redo log :

LOG_ARCHIVE_START=TRUE

(il est possible de ne pas autoriser l’archivage automatique, mais dans ce cas lorsque tous les fichiers de redo log sont complets et non archivés, l’instance est gelée jusqu’à ce qu’un archivage manuel des fichiers de redo log soit réalisé avec la commande alter system archive log all).

Le paramètre LOG_ARCHIVE_DEST spécifie le répertoire de destination en local des archives des fichiers de redo log :

LOG_ARCHIVE_DEST=/oem/oracle/OEMD1ORA/archivelog

Étape 3 : Mise en mode archivelog de la base de données, cette dernière ne devant pas être ouverte durant la mise en mode archivelog. À l’issue de la mise en mode archivelog, la base de données peut alors être ouverte.

startup mount;
alter database archivelog;
alter database open;

Authentification

L’instance cible OEMD1ORA à sauvegarder doit avoir le paramètre remote_login_passwordfile défini à exclusive en ayant créé au préalable le fichier orapwOEMD1ORA dans le répertoire $ORACLE_HOME/dbs avec le binaire orapwd :

OEMD1ORA > orapwd password=<password>  file=/Software/oracle/Instances/OEMD1ORA/mdp/orapwOEMD1ORA
OEMD1ORA > cd /Software/oracle/app/product/9.2.0/dbs/
OEMD1ORA > ln -s /Software/oracle/Instances/OEMD1ORA/mdp/orapwOEMD1ORA

Dans le fichier d’initialisation de l’instance OEMD1ORA initOEMD1ORA.ora (répertoire $CFG : /Software/oracle/Instances/OEMD1ORA/pfile/initOEMD1ORA.ora), le paramètre remote_login_passwordfile est défini à exclusive :

remote_login_passwordfile=exclusive

Ce paramètre est statique et nécessite le redémarrage de l’instance OEMD1ORA.

Mise en œuvre

Schéma

Schéma RMAN

Création du catalogue

Sur une instance Oracle dédiée à RMAN, créer un tablespace et un user . Le rôle recovery_catalog_owner est indispensable.

Dans le reste de ce document, on considère que l’on se trouve dans l’environnement de l’instance OEMD1ORA à sauvegarder par RMAN et que les variables $PATH et $ORACLE_SID sont renseignées (ORACLE_SID=OEMD1ORA).

DBAP1ORA représente l’instance hébergeant le catalogue RMAN :

UNIX > sqlplus sys/*********@DBAP1ORA

create tablespace RMAN
datafile '/dba/oracle/DBAP1ORA/rman_01.dbf'
size 100M
extent management local;

create user rman identified by rman_pw default tablespace RMAN;
grant connect to rman;
grant resource to rman;
grant RECOVERY_CATALOG_OWNER to rman;

La connexion au catalogue RMAN s’effectue avec le binaire rman installé dans le répertoire $ORACLE_HOME :

UNIX > rman
rman > connect catalog rman/rman_pw@DBAP1ORA

Notons que la syntaxe suivante est identique :

UNIX > rman catalog rman/rman_pw@DBAP1ORA

La création du catalogue s’effectue avec la commande create catalog :

UNIX > rman

RMAN > connect catalog rman/rman_pw@DBAP1ORA
connected to recovery catalog database
recovery catalog is not installed
RMAN > create catalog
recovery catalog created
RMAN > connect catalog rman/rman_pw@DBAP1ORA
connected to recovery catalog database

Enregistrement d’une instance dans le catalogue RMAN

Le catalogue contient les éléments relatifs à l’instance à sauvegarder, comme la structure de la base ou l’état des journaux de transaction et l’état des fichiers de contrôle. Un numéro d’identification unique est également attribué, ainsi qu’une définition de l’environnement de sauvegarde.

Quelques informations doivent être initiées dans le référentiel afin de démarrer une sauvegarde. Cela s’appelle l’enregistrement (registration).

Notons la syntaxe suivante qui permet la connexion au catalogue en déduisant de l’environnement courant le serveur à prendre en charge.

UNIX > rman catalog rman/rman_pw@DBAP1ORA target /

Elle est équivalente à :

UNIX > rman catalog rman/rman_pw@DBAP1ORA target sys/sys_pw@OEMD1ORA

L’enregistrement de l’instance OEMD1ORA dans le catalogue RMAN s’effectue avec la commande register database :

UNIX > rman catalog rman/rman_pw@DBAP1ORA target /
Recovery Manager: Release 9.2.0.7.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

connected to target database: OEM (DBID=2396913520)
connected to recovery catalog database
RMAN > register database;
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

Reste à synchroniser l’environnement RMAN avec les archivelogs courants de l’instance OEMD1ORA impliquée avec la commande change archivelog all crosscheck :

RMAN > change archivelog all crosscheck;

Rman est désormais prêt à sauvegarder l’instance courante OEMD1ORA.

Sauvegarder

Première sauvegarde de l’instance OEMD1ORA par RMAN

Voici la commande pour sauvegarder la première fois l’instance OEMD1ORA :

UNIX > rman catalog rman/rman@DBAP1ORA target /

RMAN > run {
				allocate channel t1 type disk;
				backup format '/oem/oracle/OEMD1ORA/exportrman/db_%d_%T_%u' database;
				sql 'alter system switch logfile';
				backup format '/oem/oracle/OEMD1ORA/exportrman/al_%d_%t_%s_%p'
				archivelog all delete input;
				backup format '/oem/oracle/OEMD1ORA/exportrman/ctf_%d_%t_%s_%p' current controlfile;
			}

Dans le détail : Les commandes doivent être encapsulées dans une structure run {}.

Allocate channel, indique le type de stockage de la sauvegarde. On considère ici qu’elle s’effectue sur disque, elle peut l’être aussi sur bande.

Les trois commandes backup possèdent toutes une instruction format qui va indiquer le fichier à créer. Le détail des paramètres de formatage des fichiers est disponible sur ss64.com : http://www.ss64.com/ora/rman_format_string.html

Les reste est assez intuitif : les instructions backup database, archivelog et controlfile sauvegardent respectivement la base, les fichiers archivelogs et les fichiers de control (control files).

Vérification de la sauvegarde

Rman est également l’interface permettant de visualiser l’état de la sauvegarde de l’instance OEMD1ORA :

list backup of database est la commande permettant de voir les sauvegardes effectuées et disponibles.

RMAN > list backup of database;

List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1558    Full    178M       DISK        00:00:16     10/10/05
        BP Key: 1559   Status: AVAILABLE   Tag: TAG20051010T124109
        Piece Name: /oem/oracle/OEMD1ORA/exportrman/bck_3oh0rc35_1_1
        
  List of Datafiles in backup set 1558
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/system_01.dbf
  2       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/rbs_01.dbf
  3       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/tools_01.dbf
  4       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/oem_repository_01.dbf

la commande restore database validate simule une restauration sans l’appliquer, permettant ainsi de vérifier que tous les éléments - catalogue et fichiers - sont disponibles et permettent de recharger des données.

RMAN > restore database validate;

Starting restore at 11/10/05

allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=9 devtype=DISK
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: restored backup piece 1
piece handle=/oem/oracle/OEMD1ORA/exportrman/bck_3oh0rc35_1_1 tag=TAG20051010T124109 params=NULL
channel ORA_DISK_1: validation complete
Finished restore at 11/10/05

La commande show all liste tous les paramètres de configuration définis pour la sauvegarde de ce serveur.

RMAN > show all;

RMAN configuration parameters are:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oem/oracle/OEMD1ORA/exportrman/cf%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/oem/oracle/OEMD1ORA/exportrman/bck_%d_%T_%u';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/Software/oracle/app/product/9.2.0/dbs/snapcf_OEMD1ORA.f'; # default

La commande report schema affiche la structure de l’instance OEMD1ORA sauvegardée.

RMAN > report schema;

Report of database schema
File K-bytes    Tablespace           RB segs Datafile Name
---- ---------- -------------------- ------- -------------------
1        256000 SYSTEM               YES     /oem/oracle/OEMD1ORA/system_01.dbf
2         51200 RBS                  YES     /oem/oracle/OEMD1ORA/rbs_01.dbf
3        204800 TOOLS                NO      /oem/oracle/OEMD1ORA/tools_01.dbf
4        204800 OEM_REPOSITORY       NO      /oem/oracle/OEMD1ORA/oem_repository_01.dbf

Sauvegarde avancée

La commande de sauvegarde de l’exemple précédent est brute. L’exemple suivant va montrer de quelle manière l’effectuer de manière un peu plus optimisée.

La syntaxe de la commande configure est disponible sur ss64.com : http://www.ss64.com/ora/rman_configure.html

RMAN > configure retention policy to recovery window of 1000 days;
configure retention policy to redundancy 1;
configure backup optimization off;
configure controlfile autobackup off;
configure default device type to Disk;
configure channel device type disk format '/oem/oracle/OEMD1ORA/exportrman/bck_%d_%T_%u';
run {
		resync catalog;
		change archivelog all crosscheck;
		backup FORMAT '/oem/oracle/OEMD1ORA/exportrman/bck_%U' database plus archivelog tag 'daily_backup';
		backup format '/oem/oracle/OEMD1ORA/exportrman/ctl_%U' current controlfile;
	}

Quelques remarques :

  • resync catalog et change archivelog all crosscheck synchronisent et la structure de la base et les journaux de transaction disponibles.
  • recovery window est la période de rétention des informations permettant au catalogue d’effectuer une restauration. Les sauvegardes obsolètes sont visibles par la commande report obsolete et peuvent être purgées par delete obsolete. Placer 1000 jours comme dans l’exemple ci-dessus permet de restaurer une base mise sur bande.
  • redundancy : nombre de copies conservées par rman
  • Notons l’instruction plus archivelog de la commande backup. Celle-ci force une rotation de log (switch) avant et après la sauvegarde les conservant ainsi au sein d’une même image.
  • Enfin, l’instruction tag permet dans le cadre d’une restauration de revenir au moment précis de la sauvegarde , utilisant le tag comme référence.

Sauvegarde incrémentale

Caractéristique intéressante du produit RMAN, non détaillée ici, est la sauvegarde incrémentale :

  • Level 0 : Point de départ d’une sauvegarde incrémentale (correspond à une sauvegarde complète).
  • Level 1 : Seuls les blocs modifiés depuis la dernière sauvegarde Level 0 sont pris en compte.
  • Level 2 : Différentielle, sauvegarde depuis la dernière commande de Niveau 2.

Ces sauvegardes différentielles feront l’objet d’une autre documentation:

RMAN Sauvegarde differentielle

Exclusions de tablespaces dans une sauvegarde

La commande configure exclude for tablespace <tablespace_name> permet d’exclure des tablespaces d’une sauvegarde :

RMAN >	configure exclude for tablespace TOOLS;
		run { backup database; }

Restaurer

Restauration de la dernière sauvegarde

Voici une commande de restauration simple. Elle consiste à rétablir le contenu de la dernière sauvegarde.


RMAN > run {
				shutdown immediate;
				startup mount;
				# set until time "TO_DATE('09/10/2005','DD/MM/YYYY')";
				# set until scn 7292732;
				# set until sequence 9923;
				restore database;
				recover database;
				alter database open; #resetlogs;
			}

Notons les 3 lignes commentées set until, qui permettent de remonter la sauvegarde à un point bien défini.

  • La commande restore database ne restore pas le fichier de contrôle.

Restauration d’une sauvegarde passée

Dans le cadre d’une application d’une sauvegarde passée, il est nécessaire d’ouvrir la base en mode resetlogs (alter database open resetlogs).

La commande list backup of database donne la liste des sauvegardes disponibles à la restauration.

RMAN> list backup of database;
List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1558    Full    178M       DISK        00:00:16     10/10/05
        BP Key: 1559   Status: AVAILABLE   Tag: TAG20051010T124109
        Piece Name: /oem/oracle/OEMD1ORA/exportrman/bck_3oh0rc35_1_1
  List of Datafiles in backup set 1558
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/system_01.dbf
  2       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/rbs_01.dbf
  3       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/tools_01.dbf
  4       Full 7384938    10/10/05 /oem/oracle/OEMD1ORA/oem_repository_01.dbf
  
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1685    Full    178M       DISK        00:00:16     14/10/05
        BP Key: 1686   Status: AVAILABLE   Tag: TAG20051014T092749
        Piece Name: /oem/oracle/OEMD1ORA/exportrman/bck_40h25i8l_1_1
  List of Datafiles in backup set 1685
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 7504314    14/10/05 /oem/oracle/OEMD1ORA/system_01.dbf
  2       Full 7504314    14/10/05 /oem/oracle/OEMD1ORA/rbs_01.dbf
  3       Full 7504314    14/10/05 /oem/oracle/OEMD1ORA/tools_01.dbf
  4       Full 7504314    14/10/05 /oem/oracle/OEMD1ORA/oem_repository_01.dbf

Elle fournit 2 informations essentielles :

  • le nom des fichiers contenant la sauvegarde, permettant en particulier de les récupérer des bandes ou autre support d’archivage,
  • Le SCN correspondant à la sauvegarde (Ckp SCN), qui va être utile pour définir la limite de restauration

À noter que le nombre de sauvegardes disponibles dépend du paramètre de configuration recovery window.

Une fois tous les fichiers disponibles à l’emplacement prévu, on peut lancer la restauration en utilisant le n° SCN (Ckp SCN) de la sauvegarde voulue (set until scn n°) :

RMAN> run {
				shutdown immediate;
				startup mount;
				# set until time 'Nov 15 2000 09:00:00';
				set until scn 7384938;
				# set until sequence 9923; number
				restore database;
				recover database;
				alter database open resetlogs;
			}

L’ouverture de la base en mode resetlogs est visible dans le catalogue sous le nom d’incarnation. Si l’on souhaite pouvoir revenir à un état précédent à l’ouverture de la base en mode resetlogs, il faut le signifier au catalogue grâce aux commandes rman list incarnation et reset database to incarnation <# incarnation> :

RMAN> list incarnation

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            CUR Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       2       OEM      2396913520       NO  2526702    29/04/05
1       824     OEM      2396913520       NO  7266095    06/10/05
1       1147    OEM      2396913520       YES 7292733    07/10/05

La colonne CUR ( pour Current ) indique la position active ; supposons que l’on souhaite revenir au 06/10/2005, il faut le spécifier au système de la manière suivante, en repérant le n° d’incarnation souhaité (Col Inc Key ) :

RMAN> reset database to incarnation 824;

database reset to incarnation 824 in recovery catalog
RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            CUR Reset SCN  Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1       2       OEM      2396913520       NO  2526702    29/04/05
1       824     OEM      2396913520       YES 7266095    06/10/05
1       1147    OEM      2396913520       NO  7292733    07/10/05

On peut dès lors restaurer la sauvegarde du 6/10/2005, mais pour celle-ci l’option restore controlfile devra être utilisée pour bien signifier qu’il est nécessaire de restaurer le fichier de contrôle :

RMAN> run {
				shutdown immediate;
				startup nomount;
				restore controlfile;
				alter database mount;
				# set until time 'Nov 15 2000 09:00:00';
				set until scn 7384938;
				# set until sequence 9923; number
				restore database;
				recover database;
				alter database open resetlogs;
			}

Restauration d’un tablespace

Une caractéristique intéressante de rman est sa capacité à restaurer un tablespace.

Voyons le cas simple d’une restauration du dernier tablespace sauvegardé.

Le tablespace doit être mis offline avant restauration et online à l’issue de la restauration.

RMAN > run {
				sql 'alter tablespace TOOLS offline';
				restore tablespace TOOLS;
				recover tablespace TOOLS;
				sql 'alter tablespace TOOLS online';
			}