Update backup_rman.sh

This commit is contained in:
Yacine31
2023-03-10 16:36:42 +01:00
parent 33d71188f7
commit 21b0321685

View File

@@ -8,6 +8,7 @@
# 13/10/2015 : YAO - ajout des params en ligne de commande # 13/10/2015 : YAO - ajout des params en ligne de commande
# 03/05/2016 : YAO - adaptation a l'environnement SOM # 03/05/2016 : YAO - adaptation a l'environnement SOM
# 04/05/2016 : YAO - ajout du niveau de sauvegarde : incrementale 0 ou 1 # 04/05/2016 : YAO - ajout du niveau de sauvegarde : incrementale 0 ou 1
# 09/11/2022 : YAO - backup simple => db full
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
@@ -21,22 +22,22 @@ f_init() {
# les différents répertoires # les différents répertoires
export SCRIPTS_DIR=/home/oracle/scripts export SCRIPTS_DIR=/home/oracle/scripts
export BKP_LOG_DIR=$SCRIPTS_DIR/logs export BKP_LOG_DIR=$SCRIPTS_DIR/logs
export BKP_LOCATION=/orasave/$(hostname)_${ORACLE_SID}/backup_rman export BKP_LOCATION=/sauve_rman/$(hostname)_${ORACLE_SID}/backup_rman
# nombre de sauvegarde RMAN en ligne à garder # nombre de sauvegarde RMAN en ligne à garder
export BKP_REDUNDANCY=1 export BKP_REDUNDANCY=1
export DATE_JOUR=$(date +%Y.%m.%d-%H.%M) export DATE_JOUR=$(date +%Y.%m.%d-%H.%M)
export BKP_LOG_FILE=${BKP_LOG_DIR}/backup_rman_${ORACLE_SID}_${BKP_TYPE}_${DATE_JOUR}.log export BKP_LOG_FILE=${BKP_LOG_DIR}/backup_rman_${ORACLE_SID}_${DATE_JOUR}.log
export RMAN_CMD_FILE=${SCRIPTS_DIR}/rman_cmd_file_${ORACLE_SID}_${BKP_TYPE}.rman export RMAN_CMD_FILE=${BKP_LOG_DIR}/rman_cmd_file_${ORACLE_SID}.rman
# nombre de jours de conservation des logs de la sauvegarde # nombre de jours de conservation des logs de la sauvegarde
export BKP_LOG_RETENTION=15 export BKP_LOG_RETENTION=15
# nombre de jours de conservation des archivelog sur disque
export ARCHIVELOG_RETENTION=1
# nombre de canaux à utiliser # nombre de canaux à utiliser
export PARALLELISM=3 export PARALLELISM=1
# mail pour envoyer les erreurs
MAIL_RCPT="support@axiome.io,yacine.oumghar@gmail.com"
} # f_init } # f_init
@@ -46,17 +47,10 @@ f_init() {
f_help() { f_help() {
cat <<CATEOF cat <<CATEOF
syntax : $O -s ORACLE_SID -t DB|AL -l Full|Incr syntax : $O -s ORACLE_SID
-s ORACLE_SID -s ORACLE_SID
-t
-t DB => backup full (database + archivelog)
-t AL => backup des archivelog seulement
-l -t full => backup complet
-t incr => backup incrementale 1
CATEOF CATEOF
exit $1 exit $1
@@ -75,17 +69,6 @@ f_print()
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
f_options() { f_options() {
case ${BKP_TYPE} in
DB)
BKP_DB_PLUS_AL=TRUE;
;;
AL)
BKP_DB_PLUS_AL=FALSE;
;;
*) f_help 2;
;;
esac
case ${BKP_LEVEL} in case ${BKP_LEVEL} in
"FULL") "FULL")
BKP_FULL=TRUE; BKP_FULL=TRUE;
@@ -106,15 +89,11 @@ f_options() {
# s, l et t suivis des : => argument attendu # s, l et t suivis des : => argument attendu
# h => pas d'argument attendu # h => pas d'argument attendu
while getopts s:t:l:h o while getopts s:h o
do do
case $o in case $o in
t) BKP_TYPE=$OPTARG;
;;
s) ORACLE_SID=$OPTARG; s) ORACLE_SID=$OPTARG;
;; ;;
l) BKP_LEVEL=$OPTARG;
;;
h) f_help 0; h) f_help 0;
;; ;;
*) f_help 2; *) f_help 2;
@@ -122,16 +101,13 @@ do
esac esac
done done
#------------------------------------------------------------------------------
# traitement de la ligne de commande # traitement de la ligne de commande
#------------------------------------------------------------------------------
[ "${BKP_TYPE}" ] || f_help 2;
[ "${BKP_LEVEL}" ] || BKP_LEVEL=FULL;
[ "${ORACLE_SID}" ] || f_help 2; [ "${ORACLE_SID}" ] || f_help 2;
BKP_LEVEL=$(echo ${BKP_LEVEL} | tr [a-z] [A-Z]) # f_options
BKP_TYPE=$(echo ${BKP_TYPE} | tr [a-z] [A-Z])
f_options
# positionner les variables d'environnement ORACLE # positionner les variables d'environnement ORACLE
export ORACLE_SID export ORACLE_SID
@@ -139,70 +115,69 @@ ORAENV_ASK=NO
PATH=/usr/local/bin:$PATH PATH=/usr/local/bin:$PATH
. oraenv -s . oraenv -s
#------------------------------------------------------------------------------
# inititalisation des variables d'environnement # inititalisation des variables d'environnement
#------------------------------------------------------------------------------
f_init f_init
#------------------------------------------------------------------------------
# si ce n'est pas le user oracle qui lance le script, on quitte # si ce n'est pas le user oracle qui lance le script, on quitte
#------------------------------------------------------------------------------
if (test `whoami` != $ORACLE_OWNER) if (test `whoami` != $ORACLE_OWNER)
then then
echo echo
echo "-----------------------------------------------------" echo "-----------------------------------------------------"
echo "Vous devez etre $ORACLE_OWNER pour lancer ce script" echo "Vous devez etre $ORACLE_OWNER pour lancer ce script"
echo
echo "-----------------------------------------------------" echo "-----------------------------------------------------"
exit 2 exit 2
fi fi
#------------------------------------------------------------------------------
# initialisation des chemins, s'ils n'existent pas ils seront créés par la commande install # initialisation des chemins, s'ils n'existent pas ils seront créés par la commande install
#------------------------------------------------------------------------------
install -d ${BKP_LOCATION} install -d ${BKP_LOCATION}
install -d ${BKP_LOG_DIR} install -d ${BKP_LOG_DIR}
#------------------------------------------------------------------------------
# génération du script de la sauvegarde RMAN # génération du script de la sauvegarde RMAN
#------------------------------------------------------------------------------
echo " echo "
run { run {
CONFIGURE DEVICE TYPE DISK PARALLELISM $PARALLELISM ; CONFIGURE DEVICE TYPE DISK PARALLELISM $PARALLELISM ;
CONFIGURE RETENTION POLICY TO REDUNDANCY ${BKP_REDUNDANCY}; CONFIGURE RETENTION POLICY TO REDUNDANCY ${BKP_REDUNDANCY};
" > ${RMAN_CMD_FILE} BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' AS COMPRESSED BACKUPSET DATABASE;
# si sauvegarde DB (-t db) on ajoute cette ligne
if [ "${BKP_DB_PLUS_AL}" == "TRUE" ]; then
# si backup incrementale
if [ "${BKP_FULL}" == "TRUE" ]; then
echo "
BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' as compressed backupset database;
" >> ${RMAN_CMD_FILE}
else
echo "
BACKUP INCREMENTAL LEVEL 1 DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' as compressed backupset database;
" >> ${RMAN_CMD_FILE}
fi # if BKP_FULL
fi # if BKP_DB_PLUS_AL
# on continue avec la partie commune : backup des archivelog + spfile + controlfile
echo "
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT'; SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/arch_%T_%t_%s_%p' TAG 'ARCH_${DATE_JOUR}' AS COMPRESSED BACKUPSET ARCHIVELOG BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/arch_%T_%t_%s_%p' TAG 'ARCH_${DATE_JOUR}' AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE ALL INPUT;
UNTIL TIME 'SYSDATE-${ARCHIVELOG_RETENTION}' ALL DELETE ALL INPUT;
BACKUP CURRENT CONTROLFILE FORMAT '${BKP_LOCATION}/control_%T_%t_%s_%p' TAG 'CTLFILE_${DATE_JOUR}'; BACKUP CURRENT CONTROLFILE FORMAT '${BKP_LOCATION}/control_%T_%t_%s_%p' TAG 'CTLFILE_${DATE_JOUR}';
DELETE NOPROMPT OBSOLETE; DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUPSET; DELETE NOPROMPT EXPIRED BACKUPSET;
SQL \"ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS ''${BKP_LOCATION}/${ORACLE_SID}_control_file.trc'' REUSE\";
SQL 'ALTER DATABASE BACKUP CONTROLFILE TO TRACE'; SQL \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}.ora'' FROM SPFILE\";
SQL \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}_$(date +%Y.%m.%d).ora'' FROM SPFILE\";
} }
" >> ${RMAN_CMD_FILE} " > ${RMAN_CMD_FILE}
#------------------------------------------------------------------------------
# Execution du script RMAN # Execution du script RMAN
#------------------------------------------------------------------------------
f_print "------------------------- DEBUT DE LA BACKUP -------------------------" f_print "------------------------- DEBUT DE LA BACKUP -------------------------"
${ORACLE_HOME}/bin/rman target / cmdfile=${RMAN_CMD_FILE} log=${BKP_LOG_FILE} ${ORACLE_HOME}/bin/rman target / cmdfile=${RMAN_CMD_FILE} log=${BKP_LOG_FILE}
#------------------------------------------------------------------------------
# Mail si des erreurs dans le fichier de sauvegarde
#------------------------------------------------------------------------------
ERR_COUNT=$(egrep "^RMAN-[0-9]*|^ORA-[0-9]:" ${BKP_LOG_FILE} | wc -l)
SUBJECT="$(hostname)-${ORACLE_SID} : RMAN Backup"
if [ ${ERR_COUNT} -ne 0 ]; then
mutt -s $SUBJECT ${MAIL_RCPT} < ${BKP_LOG_FILE}
else
mutt -s $SUBJECT ${MAIL_RCPT} < ${BKP_LOG_FILE}
fi
#------------------------------------------------------------------------------
# Nettoyage auto des logs : durée de concervation déterminée par la variable : ${BKP_LOG_RETENTION} # Nettoyage auto des logs : durée de concervation déterminée par la variable : ${BKP_LOG_RETENTION}
#------------------------------------------------------------------------------
f_print "------------------------- NETTOYAGE DES LOGS -------------------------" f_print "------------------------- NETTOYAGE DES LOGS -------------------------"
find ${BKP_LOG_DIR} -type f -iname "backup_rman_${BKP_TYPE}*.log" -mtime +${BKP_LOG_RETENTION} -exec rm -fv "{}" \; >> $BKP_LOG_FILE find ${BKP_LOG_DIR} -type f -iname "backup_rman_${BKP_TYPE}*.log" -mtime +${BKP_LOG_RETENTION} -exec rm -fv "{}" \; >> $BKP_LOG_FILE
f_print "------------------------- BACKUP ${BKP_TYPE} TERMINE -------------------------" f_print "------------------------- BACKUP ${BKP_TYPE} TERMINE -------------------------"