Il y a quelques semaines, lors d'une mission, les répertoires contenant une base Oracle en fonctionnement se sont avérés peser plus de 70Go; or, une sauvegarde effectuée sur une machine Windows montrait que le dump de la base ne pesait « que » 1,7Go. Le serveur devant être sauvegardé de façon régulière, il a alors été décidé de ne sauvegarder que le dump, et pas la base "à chaud". Il fallait donc trouver un moyen automatique de sauvegarder la base, moyen qui fût trouvé dans le script Windows qui faisait anciennement les dumps: la commande exp (pour export).

La sauvegarde se fait alors très simplement:

[bash]
# Attention, utilisation de GNU date
OLDDATE=`date -d "8 days ago" +"%Y%m%d"`
DATE=`date +"%Y%m%d"`
BACKUPDIR="/oracle/backups"
USER=utilisateur
PASS=password

# On passe en utilisateur oracle, on lance la sauvegarde en
# spécifiant le fichier de dump et on envoit les logs dans un
# fichier de log en complément du dump
# enfin, on efface les sauvegardes de 8 jours avant
su - oracle -c "exp ${USER}/${PASS} \
file=${BACKUPDIR}/backup-${DATE}.dump \
&> ${BACKUPDIR}/backup-${DATE}.log \
&& rm -f ${BACKUPDIR}/backup-${OLDDATE}.*"

À noter, il existe la commande imp (pour import), qui permet d'effectuer l'opération inverse.