Vote utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

Dans cet article nous allons voir comment créer un catalogue pour l'utilitaire RMAN. Ce catalogue va héberger les références des fichiers sauvegardés, leurs significations et dates. Ces informations seront également stockées dans le control file de la base de données mais seront très utiles en cas de crash complet ou de corruption de ce control file, il est donc prudent et recommandé d'héberger ce catalogue sur une autre machine (si les bases sont sur des VM, il faudra trouver une autre VM allouée sur un host physique différent).

Les sauvegardes L0 et L1 sont respectivement des sauvegardes complètes et incrémentales, toutes les deux sont des sauvegardes à chaud (base ouverte) elles ne sont possibles que si la base de données est en mode ARCHIVELOG. L'unique sauvegarde à chaud possible en mode NOARCHIVELOG est l'export (datapump de préférence).

Allons-y !

Préparation du Catalogue RMAN

Il faut soit créer une base spécifique pour héberger le catalogue RMAN soit en utiliser une déja existante et créer un utilisateur/schéma pour abriter les objets du catalogue. Cette base devra être sauvegardée autrement que via RMAN (via un export datapump par exemple)

 

SQL> connect SYSTEM @RMAN
Enter password:
Connected.
SQL> CREATE TABLESPACE RMAN DATAFILE 'RMAN.dbf' SIZE 128M AUTOEXTEND ON NEXT 16M MAXSIZE 1024M LOGGING EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;

Tablespace created.

SQL> CREATE USER RMAN IDENTIFIED BY RMAN
  TEMPORARY TABLESPACE TEMP
  DEFAULT TABLESPACE RMAN
  QUOTA UNLIMITED ON RMAN;

User created.

SQL> GRANT RECOVERY_CATALOG_OWNER TO RMAN;

Grant succeeded.

 

On va ensuite initialiser le catalogue en lançant l’utilitaire RMAN en ligne de commande :

[oracle]$ rman catalog RMAN/RMAN@RMAN

Recovery Manager: Release 10.2.0.5.0 - Production on Tue Mar 25 11:39:43 2014

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to recovery catalog database



RMAN> CREATE CATALOG;

recovery catalog created


RMAN>EXIT

 

On enregistre ensuite la base à sauvegarder dans le catalogue RMAN.

Si la base est une base située sur le serveur (on aura préalablement lancer un oraenv ou positionner les variables ORACLE_HOME et ORACLE_SID)

[oracle]$ rman target=/ catalog RMAN/RMAN@RMAN
RMAN> REGISTER DATABASE;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

 

On peut lister les schemas de la base source :

RMAN> REPORT SCHEMA;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    960      SYSTEM               YES     /gnx/system/system01.dbf
2    7560     UNDOTBS1             YES     /gnx/rbs/undotbs01.dbf
3    4688     SYSAUX               NO      /gnx/system/sysaux01.dbf
4    8960     DATA_EVE             NO      /gnx/data/DATA_EVE02.dbf
5    16384    DATA_EVL             NO      /gnx/data/DATA_EVL2.dbf
6    18512    DATA_EVP             NO      /gnx/data/DATA_EVP02.dbf
7    10240    DATA_EVR             NO      /gnx/data/DATA_EVR02.dbf
8    12000    DATA_EVT             NO      /gnx/data/DATA_EVT02.dbf
9    1500     DATA_EVYD            NO      /gnx/data/DATA_EVYD02.dbf
10   1500     DATA_EVYE            NO      /gnx/data/DATA_EVYE02.dbf
11   12388    DATA_GNX             NO      /gnx/data/DATA_GNX01.dbf
12   1900     DATA_MSK             NO      /gnx/data/DATA_MSK02.dbf
13   2200     DATA_P_ECR           NO      /gnx/data/DATA_P_ECR02.dbf
14   1000     DATA_P_LCH           NO      /gnx/data/DATA_P_LCH02.dbf
15   8448     DATA_PMV             NO      /gnx/data/DATA_PMV02.dbf
16   5120     IDX_EVE              NO      /gnx/index/IDX_EVE02.dbf
17   14336    IDX_EVL              NO      /gnx/index/IDX_EVL02.dbf
18   16748    IDX_EVP              NO      /gnx/data/IDX_EVP02.dbf
19   8048     IDX_EVR              NO      /gnx/index/IDX_EVR02.dbf
20   9280     IDX_EVT              NO      /gnx/index/IDX_EVT02.dbf
21   2432     IDX_EVYD             NO      /gnx/index/IDX_EVYD02.dbf
22   2048     IDX_EVYE             NO      /gnx/index/IDX_EVYE02.dbf
23   12364    IDX_GNX              NO      /gnx/index/IDX_GNX01.dbf
24   3632     IDX_MSK              NO      /gnx/index/IDX_MSK02.dbf
25   1580     IDX_P_ECR            NO      /gnx/index/IDX_P_ECR02.dbf
26   1520     IDX_P_LCH            NO      /gnx/index/IDX_P_LCH02.dbf
27   6700     IDX_PMV              NO      /gnx/index/IDX_PMV02.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    16384    TEMP                 16384       /gnx/temp/temp01.dbf

 

On regarde la configuration de RMAN et on ajuste en fonction des besoins :

RMAN> show all;

RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/rman/AUTOBKP_CONTROL_%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
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 ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/10.2.0/dbs/snapcf_GNX.f'; # default

 

RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;

new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

 

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/GNX_AUTOBKP_CONTROL_%F';

old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/rman/AUTOBKP_CONTROL_%F';
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/GNX_AUTOBKP_CONTROL_%F';
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

 

RMAN> CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/backup/rman/GNX_SNAPSHOT_CONTROL.ORA';

snapshot control file name set to: /backup/rman/GNX_SNAPSHOT_CONTROL.ORA
new RMAN configuration parameters are successfully stored

 

RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%U';

new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%U';
new RMAN configuration parameters are successfully stored
starting full resync of recovery catalog
full resync complete

 

RMAN> show all;

RMAN configuration parameters are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/rman/GNX_AUTOBKP_CONTROL_%F';
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 4;
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 '/backup/rman/%U';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/backup/rman/GNX_SNAPSHOT_CONTROL.ORA';

 

Scripts de sauvegarde

 

Sauvegarde de Niveau L0

On va créer un script de sauvegarde socle pour les sauvegardes incrémentales de niveau supérieur. La sauvegarde L0 sera lancée chaque semaine le dimanche à 22h. Il effectuera la sauvegarde L0 ainsi qu’une purge des anciennes sauvegardes obsolètes (selon la configuration de la rétention de RMAN).

Pour cette purge, il faut bien comprendre la notion de rétention. Lorsqu’on dit à RMAN d’avoir une rétention de 14 jours, cela ne signifie pas qu’il ne va conserver que les fichiers plus récents que 14 jours mais qu’il pourra revenir à J-14. Ainsi il pourra conserver des sauvegardes L0 et L1 nécessaires pour revenir à cette date. D’où l’importance de faire des L0 à intervalle régulier car sans cela RMAN ne pourra pas purger les sauvegardes de niveau L1.

Le script /oracle/admin/scripts/rman/RMAN_BCK_L0_GNX.sh

#!/bin/bash
export SHELL=/bin/bash;
export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/NX/bin:/oracle/11.2.0/db_home1/bin;
export ORACLE_SID=GNX
export ORACLE_HOME=/oracle/11.2.0/db_home1
echo "======================================================"
echo "-               Starting RMAN_HB_L0_backup.sh        -"
echo "======================================================"
echo .
echo "==== Archiving current redolog"
date
echo .
rman TARGET=/ CATALOG RMAN/RMAN@RMAN<<EOF
run
{
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
}
EXIT;
EOF
echo .
echo "==== Starting Level 0 Backup"
date
echo .
rman TARGET=/ CATALOG RMAN/RMAN@RMAN<<EOF
run
{
ALLOCATE CHANNEL D1 TYPE DISK FORMAT '/backup/rman/GNX_RMAN_BCK_L0_%d_%u_%s_%p';
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG TAG 'GNX_DB_ARC_INC_L0';
#report obsolete;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
}
EXIT;
EOF
echo .
echo "==== End of Level 0 Database Backup tag GNX_INC_L0"
date
echo .

 

Sauvegarde de niveau L1

Le sauvegardes de niveau L1 vont sauvegarder uniquement les données ayant été modifiées depuis la dernière sauvegarde de niveau égal ou inférieur (L1 ou L0 donc)

Le script suivant effectue une sauvegarde de niveau L1 et des archivelog suivi d’une purge des archive et des sauvegardes obsolètes

script /oracle/admin/scripts/rman/RMAN_BCK_L1_GNX.sh

#!/bin/bash
export SHELL=/bin/bash;
export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/NX/bin:/oracle/11.2.0/db_home1/bin;
export ORACLE_SID=GNX
export ORACLE_HOME=/oracle/11.2.0/db_home1
echo "======================================================"
echo "-               Starting RMAN_HB_L1_backup.sh        -"
echo "======================================================"
echo .
echo "==== Archiving current redolog"
date
echo .
rman TARGET=/ CATALOG RMAN/RMAN@RMAN<<EOF
run
{
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
}
EXIT;
EOF
echo .
echo "==== Starting Level 1 Backup"
date
echo .
rman TARGET=/ CATALOG RMAN/RMAN@RMAN<<EOF
run
{
ALLOCATE CHANNEL D1 TYPE DISK FORMAT
'/backup/rman/GNX_RMAN_BCK_L1_%d_%u_%s_%p';
BACKUP INCREMENTAL LEVEL 1 DATABASE TAG 'GNX_DB_INC_L1';
BACKUP ARCHIVELOG ALL DELETE ALL INPUT;
#REPORT OBSOLETE;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
#RELEASE CHANNEL D1;
}
EXIT;
EOF
echo .
echo "==== End of Level 1 Database Backup tag GNX_DB_INC_L1"
date
echo .

 

 

Automatisation des sauvegardes

 

Il faut ensuite automatiser le lancement de ces scripts. Le cron est une solution simple, une autre solution serait de lancer ces scripts avec Nagios par exemple. La surveillance des backups peut être fait avec Nagios et un plugin SQL en interrogeant les tables V_$RMAN_xxx

La crontab

45 23 * * 7 /oracle/11.2.0/admin/scripts/rman/RMAN_BCK_L0_GNX.sh 1>> /oracle/11.2.0/admin/log/rman/RMAN_BCK_L0_GNX.res 2>> /oracle/11.2.0/admin/log/rman/RMAN_BCK_L0_GNX.err
0 0-21/4 * * 1-6 /oracle/11.2.0/admin/scripts/rman/RMAN_BCK_L1_GNX.sh 1>> /oracle/11.2.0/admin/log/rman/RMAN_BCK_L1_GNX.res 2>> /oracle/11.2.0/admin/log/rman/RMAN_BCK_L1_GNX.err

 

Activation du BCT (Block Change Tracking) pour accélérer les sauvegardes L1

Oracle est capable de suivre les blocs de données ayant changer entre deux sauvegardes évitant à RMAN le balayage de toutes les données lors des sauvegardes L1 ou supérieur.

Pour cela lancer la commande suivante en tant que DBA :

ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/oracle/bct/bctf01.log';

 

Ajouter vos commentaires

Poster un commentaire en tant qu'invité

0 / 30000 Restriction des caractères
Votre texte doit contenir entre 10 et 30000 caractères
Vos commentaires sont soumis à la modération de l'administrateur.
conditions d'utilisation.

Participant à cette conversation