diff --git a/roles/oracle-db-install/files/backup_rman.sh b/roles/oracle-db-install/files/backup_rman.sh index 7046d49..db981c1 100644 --- a/roles/oracle-db-install/files/backup_rman.sh +++ b/roles/oracle-db-install/files/backup_rman.sh @@ -8,6 +8,7 @@ # 13/10/2015 : YAO - ajout des params en ligne de commande # 03/05/2016 : YAO - adaptation a l'environnement SOM # 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 export SCRIPTS_DIR=/home/oracle/scripts export BKP_LOG_DIR=$SCRIPTS_DIR/logs - export BKP_LOCATION=/orasave/$(hostname)_${ORACLE_SID}/backup_rman + export BKP_LOCATION=/u04/rman/${ORACLE_SID} # nombre de sauvegarde RMAN en ligne à garder export BKP_REDUNDANCY=1 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 RMAN_CMD_FILE=${SCRIPTS_DIR}/rman_cmd_file_${ORACLE_SID}_${BKP_TYPE}.rman + export BKP_LOG_FILE=${BKP_LOG_DIR}/backup_rman_${ORACLE_SID}_${DATE_JOUR}.log + export RMAN_CMD_FILE=${BKP_LOG_DIR}/rman_cmd_file_${ORACLE_SID}.rman # nombre de jours de conservation des logs de la sauvegarde export BKP_LOG_RETENTION=15 - # nombre de jours de conservation des archivelog sur disque - export ARCHIVELOG_RETENTION=1 - # 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 @@ -46,17 +47,10 @@ f_init() { f_help() { cat < backup full (database + archivelog) - -t AL => backup des archivelog seulement - --l -t full => backup complet - -t incr => backup incrementale 1 - CATEOF exit $1 @@ -75,17 +69,6 @@ f_print() #------------------------------------------------------------------------------ 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 "FULL") BKP_FULL=TRUE; @@ -106,15 +89,11 @@ f_options() { # s, l et t suivis des : => argument attendu # h => pas d'argument attendu -while getopts s:t:l:h o +while getopts s:h o do case $o in - t) BKP_TYPE=$OPTARG; - ;; s) ORACLE_SID=$OPTARG; ;; - l) BKP_LEVEL=$OPTARG; - ;; h) f_help 0; ;; *) f_help 2; @@ -122,87 +101,83 @@ do esac done +#------------------------------------------------------------------------------ # traitement de la ligne de commande +#------------------------------------------------------------------------------ -[ "${BKP_TYPE}" ] || f_help 2; -[ "${BKP_LEVEL}" ] || BKP_LEVEL=FULL; [ "${ORACLE_SID}" ] || f_help 2; -BKP_LEVEL=$(echo ${BKP_LEVEL} | tr [a-z] [A-Z]) -BKP_TYPE=$(echo ${BKP_TYPE} | tr [a-z] [A-Z]) - -f_options +# f_options # positionner les variables d'environnement ORACLE export ORACLE_SID ORAENV_ASK=NO PATH=/usr/local/bin:$PATH -. oraenv -s +. oraenv -s >/dev/null +#------------------------------------------------------------------------------ # inititalisation des variables d'environnement +#------------------------------------------------------------------------------ f_init +#------------------------------------------------------------------------------ # 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 echo "-----------------------------------------------------" exit 2 fi +#------------------------------------------------------------------------------ # initialisation des chemins, s'ils n'existent pas ils seront créés par la commande install +#------------------------------------------------------------------------------ install -d ${BKP_LOCATION} install -d ${BKP_LOG_DIR} +#------------------------------------------------------------------------------ # génération du script de la sauvegarde RMAN +#------------------------------------------------------------------------------ echo " run { CONFIGURE DEVICE TYPE DISK PARALLELISM $PARALLELISM ; CONFIGURE RETENTION POLICY TO REDUNDANCY ${BKP_REDUNDANCY}; -" > ${RMAN_CMD_FILE} - -# 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 " +BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' AS COMPRESSED BACKUPSET DATABASE; 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 -UNTIL TIME 'SYSDATE-${ARCHIVELOG_RETENTION}' ALL DELETE ALL INPUT; - +BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/arch_%T_%t_%s_%p' TAG 'ARCH_${DATE_JOUR}' AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE ALL INPUT; BACKUP CURRENT CONTROLFILE FORMAT '${BKP_LOCATION}/control_%T_%t_%s_%p' TAG 'CTLFILE_${DATE_JOUR}'; - DELETE NOPROMPT OBSOLETE; DELETE NOPROMPT EXPIRED BACKUPSET; - -SQL 'ALTER DATABASE BACKUP CONTROLFILE TO TRACE'; -SQL \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}_$(date +%Y.%m.%d).ora'' FROM SPFILE\"; +SQL \"ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS ''${BKP_LOCATION}/${ORACLE_SID}_control_file.trc'' REUSE\"; +SQL \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}.ora'' FROM SPFILE\"; } -" >> ${RMAN_CMD_FILE} +" > ${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} +#------------------------------------------------------------------------------ +# 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} +#------------------------------------------------------------------------------ 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 f_print "------------------------- BACKUP ${BKP_TYPE} TERMINE -------------------------" - diff --git a/roles/oracle-db-install/files/backup_rman_alldb.sh b/roles/oracle-db-install/files/backup_rman_alldb.sh new file mode 100644 index 0000000..d76f837 --- /dev/null +++ b/roles/oracle-db-install/files/backup_rman_alldb.sh @@ -0,0 +1,14 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ORACLE DATABASE : BACKUP ALL DB RMAN +#------------------------------------------------------------------------------ +# Historique : +# 21/04/2023 : YAO - Creation : backup de toutes les bases ouvertes +#------------------------------------------------------------------------------ + +# toutes les bases ouvertes sont sauvegardées par le script RMAN + +for i in $(ps -ef | grep pmon | grep -v grep | cut -d_ -f3) +do + sh /home/oracle/scripts/backup_rman.sh -s $i +done diff --git a/roles/oracle-db-install/files/export_datapump.sh b/roles/oracle-db-install/files/export_datapump.sh new file mode 100644 index 0000000..79b3110 --- /dev/null +++ b/roles/oracle-db-install/files/export_datapump.sh @@ -0,0 +1,119 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# Historique : +# 14/09/2011 : YOU - Creation +# 14/10/2015 : YOU - script générique pour toutes les bases +# 15/12/2022 : YOU - retention de 1 jour +#------------------------------------------------------------------------------ +#------------------------------------------------------------------------------ +# fonction init : c'est ici qu'il faut modifier toutes les variables liées +# à l'environnement +#------------------------------------------------------------------------------ +export ORACLE_OWNER=oracle + +f_init() { + + # positionner les variables d'environnement + export SCRIPTS_DIR=/home/oracle/scripts + # paramètres de lang + export LANG=en_US.UTF-8 + export NLS_LANG=AMERICAN_AMERICA.${NLS_CHARACTERSET} + + # répertoire destination de l'export + export EXP_LOCATION=/u04/expdp/$ORACLE_SID + # nom du répertoire au niveau de la base de données + export DPDIR=EXPDP_DIR + + # date = jour de la semaine : permet de garder 7 export en ligne + export JOUR_SEMAINE=$(date +%A) +} #f_init + +#------------------------------------------------------------------------------ +# fonction d'aide +#------------------------------------------------------------------------------ +f_help() { + +echo " + +syntaxe : $0 -s ORACLE_SID +------ +" +exit $1 + +} #f_help + +#---------------------------------------- +#------------ MAIN ---------------------- +#---------------------------------------- + +unset ORACLE_SID + +while getopts :s:h o +do + case $o in + s) ORACLE_SID=$OPTARG; + ;; + h) f_help 0; + ;; + *) f_help 2; + ;; + \?) f_help 2; + ;; + esac +done + +[ "${ORACLE_SID}" ] || f_help 2; + +#------------------------------------------------------------------------------ +# si ce n'est pas le user oracle qui lance le script, on quitte +#------------------------------------------------------------------------------ +if (test `whoami` != $ORACLE_OWNER) +then + echo "Vous devez etre $ORACLE_OWNER pour lancer ce script" + exit +fi + +#------------------------------------------------------------------------------ +# positionner les variables d'environnement ORACLE +#------------------------------------------------------------------------------ +export ORACLE_SID +ORAENV_ASK=NO +PATH=/usr/local/bin:$PATH +. oraenv -s >/dev/null + +#------------------------------------------------------------------------------ +# recuperation du NLS_CHARACTERSET +#------------------------------------------------------------------------------ +NLS_CHARACTERSET=$($ORACLE_HOME/bin/sqlplus -S / as sysdba < " diff --git a/roles/oracle-db-install/tasks/main.yml b/roles/oracle-db-install/tasks/main.yml index 31d0057..7ead1d2 100644 --- a/roles/oracle-db-install/tasks/main.yml +++ b/roles/oracle-db-install/tasks/main.yml @@ -14,5 +14,5 @@ - include: opatch_apply.yml # Ajout des sripts d'exploitation -# - include: scripts_exploitation.yml + - include: scripts_exploitation.yml diff --git a/roles/oracle-db-install/tasks/scripts_exploitation.yml b/roles/oracle-db-install/tasks/scripts_exploitation.yml index 91b1d5d..ca800ed 100644 --- a/roles/oracle-db-install/tasks/scripts_exploitation.yml +++ b/roles/oracle-db-install/tasks/scripts_exploitation.yml @@ -1,10 +1,76 @@ --- +# +# post configuration d'une installation de base de données Oracle +# + # --------------------------------------------------- + # récupération des scripts sql + # --------------------------------------------------- + - name: Clonage du repository github SQL + git: + repo: https://github.com/Yacine31/sql.git + dest: "{{ scripts_dir }}" + clone: yes + update: yes + force: yes + + # --------------------------------------------------- + # changement du propriétaire de root en oracle + # --------------------------------------------------- + - name: Changement du propriétaire + file: + dest: "{{ scripts_dir }}" + owner: oracle + group: oinstall + recurse: yes + + # --------------------------------------------------- + # Modification du prompt SQLPlus + # --------------------------------------------------- + - name: Modification du prompt SQLPlus + copy: src=login.sql dest={{ scripts_dir }} mode=644 owner=oracle group=oinstall + tags: login.sql + + # --------------------------------------------------- + # Ajout de la variabe ORACLE_PATH ans .bash_profile + # --------------------------------------------------- + - name: Ajout de la variabe ORACLE_PATH ans .bash_profile + lineinfile: path=/home/oracle/.bash_profile line="export ORACLE_PATH={{ scripts_dir }}" create=yes + tags: oraclepath + # --------------------------------------------------- # ajout de script oracle pour les backups rman # --------------------------------------------------- - # - name: Copie du script backup_rman.sh dans /home/oracle/scripts - # copy: src=backup_rman.sh dest=/home/oracle/scripts/ owner=oracle group=oinstall mode=755 + # - name: Copie du script backup_rman.sh dans {{ scripts_dir }} + # copy: src=backup_rman.sh dest={{ scripts_dir }}/ owner=oracle group=oinstall mode=755 # + + # - name: Copie du script backup_rman_alldb.sh dans {{ scripts_dir }} + # copy: src=backup_rman_alldb.sh dest={{ scripts_dir }}/ owner=oracle group=oinstall mode=755 + + - name: Copie du script RMAN et Datapump dans {{ scripts_dir }} + copy: src={{ item }} dest={{ scripts_dir }}/ owner=oracle group=oinstall mode=755 + loop: + - backup_rman.sh + - backup_rman_alldb.sh + - export_datapump.sh + - export_datapump_alldb.sh + tags: backup + + - name: Création de répertoire de sauvegarde RMAN et Datapump /u04 + file: dest=/u04 mode=775 owner=oracle group=oinstall state=directory recurse=yes + tags: backup + + - name: installation du package mutt pour envoyer des mails depuis le shell + yum: name=mutt state=latest disable_gpg_check=yes + tags: backup + + - name: Ajout de la tâche cron RMAN + cron: name="Backup RMAN des bases ouvertes et en AL" user=oracle minute="44" hour="23" job="sh {{ scripts_dir }}/backup_rman_alldb.sh 2>&1 1>/dev/null" + tags: backup + + - name: Ajout de la tâche cron Datapump + cron: name="Export Datapump des bases ouvertes" user=oracle minute="44" hour="21" job="sh {{ scripts_dir }}/export_datapump_alldb.sh 2>&1 1>/dev/null" + tags: backup # --------------------------------------------------- # configuration Linux : config oracle pour logrotate diff --git a/roles/oracle-db-install/templates/cron_oracle_cleaner.j2 b/roles/oracle-db-install/templates/cron_oracle_cleaner.j2 index b159a3b..741e784 100644 --- a/roles/oracle-db-install/templates/cron_oracle_cleaner.j2 +++ b/roles/oracle-db-install/templates/cron_oracle_cleaner.j2 @@ -9,16 +9,16 @@ export LSNR_LOG_DIR=${ORACLE_BASE}/diag/tnslsnr export DAYS=15 /usr/bin/logger -t ora_db_clean_xml "Clean xml file older than $DAYS days from ${RDBMS_LOG_DIR}" -find ${RDBMS_LOG_DIR} -iname "*xml" -mtime +$DAYS -print -delete | logger -t oracle_clean_xml +find ${RDBMS_LOG_DIR} -iname "*.xml" -mtime +$DAYS -print -delete | logger -t oracle_clean_xml /usr/bin/logger -t ora_lsnr_clean_xml "Clean xml file older than $DAYS days from ${LSNR_LOG_DIR}" -find ${LSNR_LOG_DIR} -iname "*xml" -mtime +$DAYS -print -delete | logger -t oracle_clean_xml +find ${LSNR_LOG_DIR} -iname "*.xml" -mtime +$DAYS -print -delete | logger -t oracle_clean_xml /usr/bin/logger -t ora_db_clean_trc "Clean trc file older than $DAYS days from ${RDBMS_LOG_DIR}" -find ${RDBMS_LOG_DIR} -iname "*trc" -mtime +$DAYS -print -delete | logger -t oracle_clean_trc +find ${RDBMS_LOG_DIR} -iname "*.trc" -mtime +$DAYS -print -delete | logger -t oracle_clean_trc /usr/bin/logger -t ora_db_clean_trm "Clean trm file older than $DAYS days from ${RDBMS_LOG_DIR}" -find ${RDBMS_LOG_DIR} -iname "*trm" -mtime +$DAYS -print -delete | logger -t oracle_clean_trm +find ${RDBMS_LOG_DIR} -iname "*.trm" -mtime +$DAYS -print -delete | logger -t oracle_clean_trm /usr/bin/logger -t ora_db_clean_aud "Clean audit file older than +$DAYS days from ${ADMIN_DIR}" find ${ADMIN_DIR} -iname "*.aud" -mtime +$DAYS -print -delete | logger -t oracle_clean_aud diff --git a/roles/oracle-db-install/vars/main.yml b/roles/oracle-db-install/vars/main.yml index e6c4d41..f0d31d0 100644 --- a/roles/oracle-db-install/vars/main.yml +++ b/roles/oracle-db-install/vars/main.yml @@ -29,3 +29,6 @@ patch_dir: "{{ oracle_sources }}" opatch_file: p6880880_190000_Linux-x86-64.zip psu_file: path_ru.zip patch_number: 34765931 + +# emplacement des sripts du compte oracle +scripts_dir: "/home/oracle/scripts" diff --git a/roles/oracle-db-preinstall/tasks/grub_configuration.yml b/roles/oracle-db-preinstall/tasks/grub_configuration.yml index 996c710..ec0e25a 100644 --- a/roles/oracle-db-preinstall/tasks/grub_configuration.yml +++ b/roles/oracle-db-preinstall/tasks/grub_configuration.yml @@ -85,7 +85,7 @@ # ajout de GRUB_ENABLE_BLSCFG=true # Workaround of Orabug 20734786 # --------------------------------------------------- - # - name: check if GRUB_ENABLE_BLSCFG=true is set + # - name: check if GRUB_ENABLE_BLSCFG=true is set # ansible.builtin.shell: grubby --info DEFAULT | grep -i GRUB_ENABLE_BLSCFG=true | wc -l # register: grep_count # tags: grub