#!/bin/sh #------------------------------------------------------------------------------ # ORACLE DATABASE : BACKUP RMAN DB + AL #------------------------------------------------------------------------------ # Historique : # 14/09/2011 : YOU - Creation # 13/10/2015 : YOU - ajout des params en ligne de commande # 24/10/2017 : YOU - ajout de level 0 + stby ctlfile + spfile including ctrl file # 12/01/2023 : YOU - modification pour les bases non archivelog #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # fonction d'aide #------------------------------------------------------------------------------ f_help() { cat <> $BKP_LOG_FILE } #f_print #---------------------------------------- #------------ MAIN ---------------------- #---------------------------------------- while getopts s:h o do case $o in s) ORACLE_SID=$OPTARG; ;; h) f_help 0; ;; *) f_help 2; ;; esac done [ "${ORACLE_SID}" ] || f_help 2; #------------------------------------------------------------------------------ # inititalisation des variables d'environnement #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # inititalisation des variables d'environnement #------------------------------------------------------------------------------ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) # Nom du fichier .env ENV_FILE=${SCRIPTS_DIR}"/.env" # Vérifier si le fichier .env existe if [ ! -f "$ENV_FILE" ]; then echo "Erreur : Le fichier $ENV_FILE n'existe pas." echo "Erreur : Impossible de charger les variables d'environnement." exit 1 fi # Charger les variables d'environnement depuis le fichier .env source "$ENV_FILE" # vérifier si ORACLE_SID est pésente dans le fichier /etc/oratab if [ "$(grep -v '^$|^#' /etc/oratab | grep -c "^${ORACLE_SID}:")" -ne 1 ]; then echo "Base ${ORACLE_SID} absente du fichier /etc/oratab ... fin du script" exit 2 fi # positionner les variables d'environnement ORACLE export ORACLE_SID ORAENV_ASK=NO PATH=/usr/local/bin:$PATH . oraenv -s # si ce n'est pas le user oracle qui lance le script, on quitte if (test `whoami` != $ORACLE_OWNER) then echo echo "-----------------------------------------------------" echo "Vous devez etre $ORACLE_OWNER pour lancer ce script" echo "-----------------------------------------------------" exit 2 fi # initialisation des chemins, s'ils n'existent pas ils seront crees par la commande install install -d ${BKP_LOCATION} install -d ${BKP_LOG_DIR} # verifier si un backup RMAN est en cours f_is_running # generation du script de la sauvegarde RMAN echo " run { CONFIGURE DEVICE TYPE DISK PARALLELISM ${BKP_PARALLELISM} ; CONFIGURE RETENTION POLICY TO REDUNDANCY ${BKP_REDUNDANCY}; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BKP_LOCATION}/ctrlfile_auto_%F'; SHUTDOWN IMMEDIATE; STARTUP MOUNT; BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' as compressed backupset database; BACKUP CURRENT CONTROLFILE FORMAT '${BKP_LOCATION}/control_%T_%t_%s_%p' TAG 'CTLFILE_${DATE_JOUR}'; BACKUP SPFILE INCLUDE CURRENT CONTROLFILE FORMAT '${BKP_LOCATION}/spfile_ctrlfile_%T_%t_%s_%p' TAG 'SPFILE_CTRLFILE_${DATE_JOUR}'; ALTER DATABASE OPEN; CROSSCHECK BACKUPSET; DELETE NOPROMPT OBSOLETE; DELETE NOPROMPT EXPIRED BACKUPSET; SQL \"ALTER DATABASE BACKUP CONTROLFILE TO TRACE as ''${BKP_LOCATION}/controlfile_${ORACLE_SID}.trc'' reuse\"; SQL \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}.ora'' FROM SPFILE\"; } " > ${RMAN_CMD_FILE} # Execution du script RMAN f_print "------------------------- DEBUT DE LA BACKUP -------------------------" ${ORACLE_HOME}/bin/rman target / cmdfile=${RMAN_CMD_FILE} log=${BKP_LOG_FILE} # Nettoyage auto des logs : duree de concervation determinee par la variable : ${BKP_LOG_RETENTION} f_print "------------------------- NETTOYAGE DES LOGS -------------------------" find ${BKP_LOG_DIR} -type f -iname "backup_rman_${ORACLE_SID}*.log" -mtime +${BKP_LOG_RETENTION} -exec rm -fv "{}" \; >> $BKP_LOG_FILE f_print "------------------------- BACKUP ${ORACLE_SID} TERMINE -------------------------"