Une sauvegarde incrémentale avec RMAN

L’objet de cet article est de proposer un façon de réaliser des sauvegardes incrémentales avec RMAN. L’ensemble est en environnement Oracle Linux, avec une base 11gr2 et des scripts en bash.

Scénario

Le dimanche

Le dimanche on procède à une sauvegarde complète de la base de données, c’est à dire :

  • Sauvegarde full de la base
  • Sauvegarde des archives logs
  • Suppression des archives log sauvegardés
  • Compression des données sauvegardées
  • Les sauvegardes Full sont marquées « Backup Full_Dimanche » pour pouvoir les identifier plus facilement dans RMAN.

Le format des fichiers est le suivant :

« Nom de la base » + « DB » pour les datas ou « AL » pour les archivelogs + « Heure de sauvegarde sur 4 octets » + « N° du backupset » + « p »+ »N° de la partie du backupset ».

backup_inc0.sh:

#!/bin/sh
#
# Script de sauvegarde Incrémental niveau 0
#
# 31/05/2012 - FL : Création

REPERT=/home/oracle/backup # Répertoire où sera sauvegardée la base de données sur le serveur distant.

# ON récupère les variables d'environnement ORACLE
source $HOME/.oraclerc
# Script de vérification de la connectivité
source $HOME/commun_bkup.sh $*

echo "Lancement de la sauvegarde - Niveau 0"
# Lancement de la sauvegarde
rman catalog $PASS_RMAN target $PASS@$CIBLE << EOF
run {
	allocate channel t1 type disk;
	# Backup de toute la base
	backup as compressed backupset
	tag Backup_Full_Dimanche
	format '$REPERT/%d_DB_%t_%s_p%p'
	incremental level 0 database;
	# On force l'archivage du redo log
	SQL 'alter system archive log current';
	# Backup des Archives Log
	backup as compressed backupset
	format '$REPERT/%d_AL_%t_%s_p%p'
	archivelog all delete input;
	release channel t1;
    }
exit;
EOF

La semaine :

Durant cette sauvegarde quotidienne, les opérations suivantes sont réalisées :

  • Sauvegarde incrémentale de la base de données
  • Sauvegarde incrémentale des archivelog
  • Les sauvegardes incrémentales sont marquées « Backup Hebdo JOUR »  où JOUR est le jour de la semaine pour pouvoir les identifier plus facilement dans RMAN.

Le format des fichiers de sauvegarde est le suivant :

« Nom de la base » + « INC » + « Heure de sauvegarde sur 4 octets » + « N° du backupset » + « p »+ »N° de la partie du backupset ».

Attention : Il s’agit de sauvegardes incrémentales, pas de sauvegardes incrémentales cumultatives.

Principe de la sauvegarde incrémentale

Script de sauvegarde, backup_inc1.sh:

#!/bin/sh
#
# Script de sauvegarde Incrémental niveau 1
#
# 31/05/2012 - FL : Création

REPERT=/home/oracle/backup # Répertoire où sera sauvegardée la base de données sur le serveur distant.

# ON récupère les variables d'environnement ORACLE
source $HOME/.oraclerc
# Script de vérification de la connectivité
source $HOME/commun_bkup.sh $*

JOUR=$(date +"%A")
echo "Lancement de la sauvegarde - Niveau 1"
# Lancement de la sauvegarde
rman catalog $PASS_RMAN target $PASS@$CIBLE << EOF
run {
	# On force l'archivage du redo log
	SQL 'alter system archive log current';
	allocate channel t1 type disk;
	# Backup de toute la base
	backup tag Backup_Hebdo_$JOUR
	format '$REPERT/%d_INC_%t_%s_p%p'
	incremental level 1 database plus archivelog;
	release channel t1;
    }
exit;
EOF

Remarques

  • Au début des scripts, on spécifie le lieu de sauvegarde grâce à la variable REPERT.
  • On utilise le script commun_bkup.sh, présenté précédemment qui permet de vérifier la connectivité à RMAN.
  • La sauvegarde full du dimanche est compressée.
  • Pour que le nom des jours apparaisse en français dans les différentes sauvegardes incrémentales, il faut avoir fixé la variable LANG  à fr_FR.UTF-8. Cela est fait dans le script commun_bkup.sh

Programmation des sauvegardes

De façon à rendre les sauvegardes automatiques, on utilise le crontab de l’utilisateur propriétaire de la base (à priori oracle) :

Voici le contenu du crontab d’oracle (à adapter selon les besoins)  :

[oracle@rman-11g ~]$ crontab -l
00 23 * * 0 /home/oracle/backup_inc0.sh t_base toto > /home/oracle/bkup.log 2>&1
00 23 * * 1-6 /home/oracle/backup_inc1.sh t_base toto > /home/oracle/bkup.log 2>&1

Dans cet exemple, on sauvegarde la base t_base (déclarée ainsi dans le tnsnames), dont le mot de passe sys est toto. (Il est possible de sécuriser ce script, en mettant le mot de passe sys directement dans le script, ou encore par l’utilisation de l’authentification par OS.)

Le dimanche, la sauvegarde de niveau 0 (full) s’effectue à 23h.
Le reste de la semaine, la sauvegarde de niveau 1 (incrémentale) s’effectue à 23h.

 

Posts relatifs

Laisser un commentaire


NOTE - Vous pouvez utiliser les éléments et attributs HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">