From 07a7290e8811d3c52dc75df4de0f5459e340fffc Mon Sep 17 00:00:00 2001 From: Yacine31 Date: Thu, 13 Oct 2022 19:29:33 +0200 Subject: [PATCH] ajout des scripts de backup rman --- backup_rman.sh | 203 ++++++++++++++++++++++++++++++++++++++ check_rman_backup.sh | 68 ++++++------- check_rman_backup_1day.sh | 8 ++ 3 files changed, 245 insertions(+), 34 deletions(-) create mode 100644 backup_rman.sh create mode 100644 check_rman_backup_1day.sh diff --git a/backup_rman.sh b/backup_rman.sh new file mode 100644 index 0000000..5765ace --- /dev/null +++ b/backup_rman.sh @@ -0,0 +1,203 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ORACLE DATABASE : BACKUP RMAN DB + AL +#------------------------------------------------------------------------------ +# Historique : +# 14/09/2011 : YAO - Creation +# 13/10/2015 : YAO - ajout des params en ligne de commande +# 24/10/2017 : YAO - ajout de level 0 + stby ctlfile + spfile including ctrl file +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# fonction init : c'est ici qu'il faut modifier toutes les variables liees +# a l'environnement +#------------------------------------------------------------------------------ +f_init() { + + export ORACLE_OWNER=oracle + export NLS_DATE_FORMAT="YYYY/MM/DD HH24:MI:SS" + + # les differents repertoires + export SCRIPTS_DIR=/home/oracle/scripts + export BKP_LOG_DIR=$SCRIPTS_DIR/logs + export BKP_LOCATION=/u02/backup/${ORACLE_SID}/backup_rman + + # nombre de sauvegarde RMAN en ligne a garder + export BKP_REDUNDANCY=2 + 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_cmdfile_${ORACLE_SID}_${BKP_TYPE}.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=2 + +} # f_init + +#------------------------------------------------------------------------------ +# fonction d'aide +#------------------------------------------------------------------------------ +f_help() { + + cat < backup full (database + archivelog) + -t AL => backup des archivelog seulement + +CATEOF +exit $1 + +} #f_help + +#------------------------------------------------------------------------------ +# fonction backup_is_running +#------------------------------------------------------------------------------ +f_is_running() { + + RUNNING_BKP=$($ORACLE_HOME/bin/sqlplus -s / as sysdba <> $BKP_LOG_FILE +} #f_print + +#------------------------------------------------------------------------------ +# fonction de traitement des options de la ligne de commande +#------------------------------------------------------------------------------ +f_options() { + + case ${BKP_TYPE} in + [dD][bB]) + BKP_DB_PLUS_AL=TRUE; + ;; + [aA][lL]) + BKP_DB_PLUS_AL=FALSE; + ;; + *) f_help 2; + ;; + esac + +} #f_options + + +#---------------------------------------- +#------------ MAIN ---------------------- +#---------------------------------------- + +while getopts s:t:h o +do + case $o in + t) BKP_TYPE=$OPTARG; + ;; + s) ORACLE_SID=$OPTARG; + ;; + h) f_help 0; + ;; + *) f_help 2; + ;; + esac +done + +# traitement de la ligne de commande +f_options + + +[ "${BKP_TYPE}" ] || f_help 2; +BKP_TYPE=$(echo ${BKP_TYPE} | tr [a-z] [A-Z]) +[ "${ORACLE_SID}" ] || f_help 2; + +# positionner les variables d'environnement ORACLE +export ORACLE_SID +ORAENV_ASK=NO +PATH=/usr/local/bin:$PATH +. oraenv -s + +# 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 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 1 ; +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'; +" > ${RMAN_CMD_FILE} + +# si sauvegarde DB (-t db) on ajoute cette ligne +if [ "${BKP_DB_PLUS_AL}" == "TRUE" ]; then +echo " +BACKUP INCREMENTAL LEVEL 0 DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' as compressed backupset database; +" >> ${RMAN_CMD_FILE} +fi + +# on continue avec la partie commune : backup des archivelog + spfile + controlfile +echo " +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 ALL DELETE ALL INPUT; + +BACKUP SPFILE INCLUDE CURRENT CONTROLFILE FORMAT '${BKP_LOCATION}/spfile_ctrlfile_%T_%t_%s_%p' TAG 'SPFILE_CTRLFILE_${DATE_JOUR}'; +BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '${BKP_LOCATION}/standby_ctrlfile_%T_%t_%s_%p' TAG 'STBY-CTLFILE_${DATE_JOUR}'; + +CROSSCHECK ARCHIVELOG ALL; +DELETE NOPROMPT ARCHIVELOG ALL; +DELETE NOPROMPT OBSOLETE; +DELETE NOPROMPT EXPIRED BACKUPSET; + +# SQL 'ALTER DATABASE BACKUP CONTROLFILE TO TRACE'; +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_${BKP_TYPE}*.log" -mtime +${BKP_LOG_RETENTION} -exec rm -fv "{}" \; >> $BKP_LOG_FILE + +f_print "------------------------- BACKUP ${BKP_TYPE} TERMINE -------------------------" diff --git a/check_rman_backup.sh b/check_rman_backup.sh index ff3842f..84ff4a6 100755 --- a/check_rman_backup.sh +++ b/check_rman_backup.sh @@ -1,6 +1,6 @@ #!/bin/bash #--------------------------------------------------------------------------- -# 24/11/2021 - YAO nouvelle version +# 24/01/2019 - YAO Adaptation après migration Crossway vers oda-cw #--------------------------------------------------------------------------- # Environnement Variables export NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS' @@ -13,8 +13,8 @@ unset NLS_LANG function test_dba { if test "$(id|grep dba)" then - return 0 - #echo " OK => Test Utilisateur DBA" + #return 0 + echo " OK => Test Utilisateur DBA" else echo "" echo "=============================================================" @@ -32,41 +32,41 @@ test_dba; #--------------------------------------------------------------------------- # for r in $(ps -eaf | grep pmon | grep -v grep | cut -d '_' -f3) -for r in $(ps -eaf | grep pmon | egrep -v 'grep|ASM|APX' | cut -d '_' -f3) +for r in $(ps -eaf | grep pmon | egrep -v 'grep|ASM1|APX1' | cut -d '_' -f3) do -# echo " Base de donnee a traiter: " $r +echo " Base de donnee a traiter: " $r export ORACLE_SID=$r . oraenv -s -# echo $ORACLE_SID $ORACLE_HOME -sqlplus -S / as sysdba << EOF -set pages 25 lines 250 -col HEURE_DEBUT for a20 -col HEURE_FIN for a20 -col LAST_BKP for a10 -col status for a25 -col IN_BYTES for a15 -col OUT_BYTES for a15 -set head off -select '---------------------------------- ' -|| 'Database name : ' || name || ', Instance name = ' || instance_name -|| ' ----------------------------------' -from v\$database, v\$instance; -set head on +echo $ORACLE_SID $ORACLE_HOME +sqlplus -S / as sysdba << EOF > /home/oracle/digora/log/rapport_rman_$r.log +alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ; +set serveroutput on +set linesize 250 heading off; +set heading on pagesize 999; +column status format a25; +column input_bytes_display format a12; +column output_bytes_display format a12; +column device_type format a10; +declare + base varchar2(40) ; + serv varchar2(40) ; +begin + select instance_name into base from v\$instance ; + select host_name into serv from v\$instance ; + dbms_output.put_line (' Vous trouverez ci dessous le rapport pour la base de donné :' || base || ' sur le serveur : '|| serv ); +end ; +/ select - d.NAME || '_' || i.instance_name "DBNAME_INSTANCE" - ,SESSION_KEY "KEY" - ,INPUT_TYPE "BKP_TYPE" - ,to_char(START_TIME,'DD-MM-YYYY HH24:MI:SS') "HEURE_DEBUT" - ,to_char(END_TIME,'DD-MM-YYYY HH24:MI:SS') "HEURE_FIN" - ,to_char(trunc(sysdate) + numtodsinterval(ELAPSED_SECONDS, 'second'),'hh24:mi:ss') "DUREE" - ,cast((floor(sysdate-start_time)) as int) || 'd ' || round((round(sysdate-start_time, 2) - cast(floor(sysdate-start_time) as int))*24,0) || 'h' as "LAST_BKP" - ,INPUT_BYTES_DISPLAY "IN_BYTES" - ,OUTPUT_BYTES_DISPLAY "OUT_BYTES" - ,r.STATUS -from V\$RMAN_BACKUP_JOB_DETAILS r, v\$database d, v\$instance i -where start_time > (SYSDATE - 7) -order by SESSION_KEY -; + b.input_type, + b.status, + to_char(b.start_time,'DD-MM-YY HH24:MI') "Start Time", + to_char(b.end_time,'DD-MM-YY HH24:MI') "End Time", + b.output_device_type device_type, + b.input_bytes_display, + b.output_bytes_display +FROM v\$rman_backup_job_details b +WHERE b.start_time > (SYSDATE - 30) +ORDER BY b.start_time asc; EOF done diff --git a/check_rman_backup_1day.sh b/check_rman_backup_1day.sh new file mode 100644 index 0000000..7792448 --- /dev/null +++ b/check_rman_backup_1day.sh @@ -0,0 +1,8 @@ +export SCRIPTS_DIR=/home/oracle/exploit +/home/oracle/scripts/running_instances.sh | while read d +do + export ORAENV_ASK=NO + export ORACLE_SID=$d + . oraenv > /dev/null + sqlplus -S / as sysdba @${SCRIPTS_DIR}/check_rman_backup_1day.sql +done