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
' vautNo 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
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
etchange 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 commandereport obsolete
et peuvent être purgées pardelete 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 commandebackup
. 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:
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';
}