From 27a022b41bf4cde92b07466ec515fcdb8ec7379f Mon Sep 17 00:00:00 2001 From: Yacine31 Date: Mon, 10 Nov 2025 03:30:58 +0100 Subject: [PATCH] =?UTF-8?q?r=C3=A9vison=20des=20script=20avec=20gemini=20:?= =?UTF-8?q?=20organisation,=20commentaire=20et=20harmonisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 23 +++++++ adr_purge.sh | 50 +++++++++----- backup_bin.sh | 40 ++++++++--- backup_rman.sh | 91 ++++++++++++++++--------- backup_rman_alldb.sh | 10 +-- check_dbvisit.sh | 28 ++++++-- check_rman_backup.sh | 19 +++--- export_datapump.sh | 46 +++++++------ export_datapump_alldb.sh | 9 +-- get_db_infos.sh | 141 +++++++++++++++++++++++---------------- is_primary.sh | 13 ++-- is_standby.sh | 13 ++-- purge_listener.sh | 79 +++++++++++----------- show_alert.sh | 32 +++++---- show_listener_log.sh | 22 +++--- 15 files changed, 386 insertions(+), 230 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ed1436c --- /dev/null +++ b/.env.example @@ -0,0 +1,23 @@ +# Fichier d'exemple pour les variables d'environnement du script de backup RMAN +# Copiez ce fichier en .env et adaptez les valeurs à votre environnement. + +# Propriétaire des binaires Oracle +ORACLE_OWNER=oracle + +# Répertoire de stockage des backups RMAN +BKP_LOCATION=/u01/backup/rman + +# Répertoire de stockage des logs de backup +BKP_LOG_DIR=/u01/backup/log + +# Politique de rétention RMAN (nombre de backups à conserver) +BKP_REDUNDANCY=3 + +# Nombre de canaux RMAN à utiliser en parallèle +PARALLELISM=4 + +# URL du service de notification (ntfy.sh) pour les erreurs +NTFY_URL=https://ntfy.sh/your_topic + +# Durée de rétention des fichiers de log de backup (en jours) +BKP_LOG_RETENTION=30 diff --git a/adr_purge.sh b/adr_purge.sh index 01d4cf6..14564b0 100755 --- a/adr_purge.sh +++ b/adr_purge.sh @@ -1,30 +1,44 @@ +#!/bin/bash +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse +#------------------------------------------------------------------------------ +# # Purge ADR contents (adr_purge.sh) # 00 05 * * 0 adr_purge.sh # Add the above line with `crontab -e` to the oracle user's cron -ALERT_RET="129600" # 90 Days -INCIDENT_RET="43200" # 30 Days -TRACE_RET="43200" # 30 Days -CDUMP_RET="43200" # 30 Days -HM_RET="43200" # 30 Days +# --- Configuration de la rétention en JOURS --- +ALERT_RET_DAYS=90 +INCIDENT_RET_DAYS=30 +TRACE_RET_DAYS=30 +CDUMP_RET_DAYS=30 +HM_RET_DAYS=30 -echo "INFO: adrci purge started at `date`" +# --- Calcul de la rétention en MINUTES pour adrci --- +ALERT_RET_MINUTES=$((ALERT_RET_DAYS * 24 * 60)) +INCIDENT_RET_MINUTES=$((INCIDENT_RET_DAYS * 24 * 60)) +TRACE_RET_MINUTES=$((TRACE_RET_DAYS * 24 * 60)) +CDUMP_RET_MINUTES=$((CDUMP_RET_DAYS * 24 * 60)) +HM_RET_MINUTES=$((HM_RET_DAYS * 24 * 60)) + +echo "INFO: adrci purge started at $(date)" adrci exec="show homes"|grep -v 'ADR Homes' | while read file_line do - echo "INFO: adrci purging diagnostic destination " $file_line - echo "INFO: purging ALERT older than 90 days" - adrci exec="set homepath $file_line;purge -age $ALERT_RET -type ALERT" - echo "INFO: purging INCIDENT older than 30 days" - adrci exec="set homepath $file_line;purge -age $INCIDENT_RET -type INCIDENT" - echo "INFO: purging TRACE older than 30 days" - adrci exec="set homepath $file_line;purge -age $TRACE_RET -type TRACE" - echo "INFO: purging CDUMP older than 30 days" - adrci exec="set homepath $file_line;purge -age $CDUMP_RET -type CDUMP" - echo "INFO: purging HM older than 30 days" - adrci exec="set homepath $file_line;purge -age $HM_RET -type HM" + echo "INFO: adrci purging diagnostic destination \"$file_line\"" + echo "INFO: purging ALERT older than $ALERT_RET_DAYS days" + adrci exec="set homepath '$file_line';purge -age $ALERT_RET_MINUTES -type ALERT" + echo "INFO: purging INCIDENT older than $INCIDENT_RET_DAYS days" + adrci exec="set homepath '$file_line';purge -age $INCIDENT_RET_MINUTES -type INCIDENT" + echo "INFO: purging TRACE older than $TRACE_RET_DAYS days" + adrci exec="set homepath '$file_line';purge -age $TRACE_RET_MINUTES -type TRACE" + echo "INFO: purging CDUMP older than $CDUMP_RET_DAYS days" + adrci exec="set homepath '$file_line';purge -age $CDUMP_RET_MINUTES -type CDUMP" + echo "INFO: purging HM older than $HM_RET_DAYS days" + adrci exec="set homepath '$file_line';purge -age $HM_RET_MINUTES -type HM" echo "" echo "" done echo -echo "INFO: adrci purge finished at `date`" +echo "INFO: adrci purge finished at $(date)" diff --git a/backup_bin.sh b/backup_bin.sh index 4541419..116ff36 100755 --- a/backup_bin.sh +++ b/backup_bin.sh @@ -1,4 +1,9 @@ -#!/bin/sh +#!/bin/bash +#------------------------------------------------------------------------------ +# Ce script effectue une sauvegarde des binaires d'une application Oracle. +# Il crée une archive tar compressée du répertoire de l'application, +# en excluant les sous-répertoires non essentiels (admin, audit, diag). +# Une notification est envoyée à la fin de l'opération (succès ou échec). #------------------------------------------------------------------------------ # Historique : # 25/09/2023 : YOU - premiere version pour sauvegarder les binaires @@ -9,7 +14,7 @@ #---------------------------------------- #------------------------------------------------------------------------------ -# inititalisation des variables d'environnement +# initialisation des variables d'environnement #------------------------------------------------------------------------------ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) @@ -26,24 +31,41 @@ fi # Charger les variables d'environnement depuis le fichier .env source "$ENV_FILE" +#------------------------------------------------------------------------------ +# Variables attendues dans le fichier .env : +#------------------------------------------------------------------------------ +# BKP_APP_LOCATION : répertoire de stockage des sauvegardes des binaires (ex: /backup/oracle_bin) +# ORA_APP_LOCATION : répertoire de base des binaires Oracle (ex: /u01/app/oracle) +# NTFY_URL : URL pour les notifications (service ntfy.sh) +#------------------------------------------------------------------------------ + +# S'assurer que toutes les variables utilisées sont définies +set -u +# Gérer les erreurs dans les pipelines +set -o pipefail + # creation du repertoire de sauvegarde. S'il existe la commande install ne fait rien -install -d ${BKP_APP_LOCATION} +mkdir -p ${BKP_APP_LOCATION} #------------------------------------------------------------------------------ # sauvegarde #------------------------------------------------------------------------------ cd ${BKP_APP_LOCATION} -# suppression des anciennes sauvegardes +# suppression des anciennes sauvegardes (note: cette commande supprime TOUTES les anciennes sauvegardes) rm -fv backup_bin_oraapp_*.tgz # compression du repertoire oracle app avec exclusion des répertoires admin, diag et audit -sudo tar cfz ${BKP_APP_LOCATION}/backup_bin_oraapp_$(date +%Y%m%d).tgz \ +if sudo tar cfz "${BKP_APP_LOCATION}/backup_bin_oraapp_$(date +%Y%m%d).tgz" \ --exclude="${ORA_APP_LOCATION}/oracle/admin" \ --exclude="${ORA_APP_LOCATION}/oracle/audit" \ --exclude="${ORA_APP_LOCATION}/oracle/diag" \ -${ORA_APP_LOCATION} - -# notification -curl -d "$(hostname) - backup des binaires terminée" ${NTFY_URL} +"${ORA_APP_LOCATION}"; then + # notification de succès + curl -d "$(hostname) - backup des binaires terminée" "${NTFY_URL}" +else + # notification d'échec + curl -d "$(hostname) - ERREUR: backup des binaires a échoué" "${NTFY_URL}" + exit 1 # Quitter avec un code d'erreur +fi diff --git a/backup_rman.sh b/backup_rman.sh index f521fce..ce99568 100755 --- a/backup_rman.sh +++ b/backup_rman.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash #------------------------------------------------------------------------------ # ORACLE DATABASE : BACKUP RMAN DB + AL #------------------------------------------------------------------------------ @@ -12,8 +12,12 @@ # 10/08/2023 : YOU - base noarchivelog : execution de rman validate # 25/09/2023 : YOU - simplification, 1 seul parametre pour le script # 25/07/2024 : YOU - fichier .env pour les variables d'environnement +# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et bonnes pratiques #------------------------------------------------------------------------------ +# Ajout de set -o pipefail pour la gestion des erreurs dans les pipes +set -o pipefail + #------------------------------------------------------------------------------ # fonction d'aide @@ -21,7 +25,7 @@ f_help() { cat <> $BKP_LOG_FILE + # on vérifie que le fichier de log est défini + if [ -z "${BKP_LOG_FILE}" ]; then + echo "[`date +"%Y/%m/%d %H:%M:%S"`] : $1" + else + echo "[`date +"%Y/%m/%d %H:%M:%S"`] : $1" >> $BKP_LOG_FILE + fi } #f_print @@ -49,7 +58,7 @@ ORACLE_SID=$1 export ORACLE_SID #------------------------------------------------------------------------------ -# inititalisation des variables d'environnement +# initialisation des variables d'environnement #------------------------------------------------------------------------------ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) @@ -67,7 +76,27 @@ fi source "$ENV_FILE" #------------------------------------------------------------------------------ -# vérifier si ORACLE_SID est dans /etc/orata +# Variables attendues dans le fichier .env : +#------------------------------------------------------------------------------ +# ORACLE_OWNER : propritaire des binaires oracle (ex: oracle) +# BKP_LOCATION : répertoire de stockage des backups (ex: /u01/backup/rman) +# BKP_LOG_DIR : répertoire de stockage des logs (ex: /u01/backup/log) +# BKP_REDUNDANCY : politique de rétention RMAN (ex: 3) +# PARALLELISM : parallélisme pour les backups RMAN (ex: 4) +# NTFY_URL : URL pour les notifications d'erreur (service ntfy.sh) +# BKP_LOG_RETENTION : durée de rétention des fichiers de log (en jours, ex: 30) +#------------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# initialisation des variables du script +#------------------------------------------------------------------------------ +export BKP_TYPE="full" +export DATE_JOUR=$(date +%Y%m%d) +export RMAN_CMD_FILE="${BKP_LOG_DIR}/rman_cmd_${ORACLE_SID}_${DATE_JOUR}.rcv" +export BKP_LOG_FILE="${BKP_LOG_DIR}/backup_rman_${BKP_TYPE}_${ORACLE_SID}_${DATE_JOUR}.log" + +#------------------------------------------------------------------------------ +# vérifier si ORACLE_SID est dans /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" @@ -85,8 +114,7 @@ ${SCRIPTS_DIR}/is_standby.sh ${ORACLE_SID} && exit 2 #------------------------------------------------------------------------------ # si ce n'est pas le user oracle qui lance le script, on quitte #------------------------------------------------------------------------------ -if (test `whoami` != $ORACLE_OWNER) -then +if [[ "$(whoami)" != "$ORACLE_OWNER" ]]; then echo echo "-----------------------------------------------------" echo "Vous devez etre $ORACLE_OWNER pour lancer ce script" @@ -95,10 +123,10 @@ then 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 #------------------------------------------------------------------------------ -install -d ${BKP_LOCATION} -install -d ${BKP_LOG_DIR} +mkdir -p ${BKP_LOCATION} +mkdir -p ${BKP_LOG_DIR} #------------------------------------------------------------------------------ # génération du script de la sauvegarde RMAN @@ -139,25 +167,25 @@ EOF LOG_MODE=$(echo $LOG_MODE | sed 's/^\s*//g') if [ "$LOG_MODE" == "NOARCHIVELOG" ]; then - echo "validate check logical database;" > ${RMAN_CMD_FILE} + cat > ${RMAN_CMD_FILE} < ${RMAN_CMD_FILE} - # } + cat > ${RMAN_CMD_FILE} </dev/null && pwd -P) @@ -9,7 +11,7 @@ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) #------------------------------------------------------------------------------ # boucle de sauvegarde des bases #------------------------------------------------------------------------------ -for b in $(ps -ef | grep pmon | grep -v grep | cut -d_ -f3 | sort) +for b in $(ps -ef | grep pmon | grep -v grep | cut -d_ -f3 | grep -Ev '+ASM|+APX' | sort) do - ${SCRIPTS_DIR}/backup_rman.sh $b + bash ${SCRIPTS_DIR}/backup_rman.sh $b done diff --git a/check_dbvisit.sh b/check_dbvisit.sh index dd6cdcc..97f4165 100644 --- a/check_dbvisit.sh +++ b/check_dbvisit.sh @@ -1,7 +1,20 @@ #!/bin/bash +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse +#------------------------------------------------------------------------------ +# +# Ce script vérifie les "Transfer Log Gap" et "Apply Log Gap" pour une base +# de données Dbvisit Standby et alerte si le seuil est dépassé. +# + +# --- Configuration --- +THRESHOLD=10 + +# --- Main --- # Vérifier si le nombre d'arguments est correct -if [ "$#" -ne 1 ]; then +if [[ "$#" -ne 1 ]]; then echo "Usage: $0 " exit 1 fi @@ -17,19 +30,20 @@ transfer_log_gap=$(echo "$output" | awk '/Transfer Log Gap/{print $4}') apply_log_gap=$(echo "$output" | awk '/Apply Log Gap/{print $4}') # Test pour Transfer Log Gap -if [ "$transfer_log_gap" -gt 10 ]; then +if [[ "$transfer_log_gap" -gt "$THRESHOLD" ]]; then # Afficher le message d'alerte avec la valeur actuelle - echo "Alerte : La valeur de Transfer Log Gap ($transfer_log_gap) pour $DBNAME est supérieure à 10." + echo "Alerte : La valeur de Transfer Log Gap ($transfer_log_gap) pour $DBNAME est supérieure à $THRESHOLD." else # Afficher un message indiquant que tout est OK - echo "La valeur de Transfer Log Gap pour $DBNAME est inférieure ou égale à 10." + echo "OK : La valeur de Transfer Log Gap pour $DBNAME est de $transfer_log_gap (inférieure ou égale à $THRESHOLD)." fi # Test pour Apply Log Gap -if [ "$apply_log_gap" -gt 10 ]; then +if [[ "$apply_log_gap" -gt "$THRESHOLD" ]]; then # Afficher le message d'alerte avec la valeur actuelle - echo "Alerte : La valeur de Apply Log Gap ($apply_log_gap) pour $DBNAME est supérieure à 10." + echo "Alerte : La valeur de Apply Log Gap ($apply_log_gap) pour $DBNAME est supérieure à $THRESHOLD." else # Afficher un message indiquant que tout est OK - echo "La valeur de Apply Log Gap pour $DBNAME est inférieure ou égale à 10." + echo "OK : La valeur de Apply Log Gap pour $DBNAME est de $apply_log_gap (inférieure ou égale à $THRESHOLD)." fi + diff --git a/check_rman_backup.sh b/check_rman_backup.sh index 4a8eb57..75029e8 100755 --- a/check_rman_backup.sh +++ b/check_rman_backup.sh @@ -1,6 +1,8 @@ #!/bin/bash #--------------------------------------------------------------------------- -# 24/01/2019 - YOU : Premiere version pour liter les backup RMAN de 30j +# Historique : +# 24/01/2019 : YOU - Premiere version pour liter les backup RMAN de 30j +# 10/11/2025 : Gemini - Améliorations : syntaxe, lisibilité et robustesse #--------------------------------------------------------------------------- # Environnement Variables export NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS' @@ -10,10 +12,7 @@ unset NLS_LANG #--------------------------------------------------------------------------- # Fonction test_dba : teste si l'utilisateur est DBA #--------------------------------------------------------------------------- -if test "$(id|grep dba)" - then - echo > /dev/null - else +if ! id | grep -q dba; then echo "" echo "=============================================================" echo " Abandon, l'utilisateur doit appartenir au groupe DBA " @@ -25,29 +24,29 @@ fi # reporter toutes les instances préntes sur ce serveur #--------------------------------------------------------------------------- -for r in $(ps -eaf | grep pmon | egrep -v 'grep|ASM1|APX1' | cut -d '_' -f3) +for r in $(ps -eaf | grep pmon | grep -Ev 'grep|ASM1|APX1' | cut -d '_' -f3) do echo "-----------------------------------------------------" echo " Base de donnee a traiter: " $r echo "-----------------------------------------------------" export ORACLE_SID=$r -# vérifier si ORACLE_SID est dans /etc/orata -if [ "$(grep -v '^$|^#' /etc/oratab | grep -c "^${ORACLE_SID}:")" -ne 1 ]; then +# vérifier si ORACLE_SID est dans /etc/oratab +if ! grep -q "^${ORACLE_SID}:" /etc/oratab; then echo "Base ${ORACLE_SID} absente du fichier /etc/oratab ... fin du script" exit 2 fi . oraenv -s > /dev/null sqlplus -S / as sysdba << EOF -set head off pages 0 feedback off -set linesize 250 heading off; +set head off pages 0 feedback off linesize 250; alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ; 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; +SET SERVEROUTPUT ON; declare base varchar2(40) ; serv varchar2(40) ; diff --git a/export_datapump.sh b/export_datapump.sh index 6f19896..5a738e9 100755 --- a/export_datapump.sh +++ b/export_datapump.sh @@ -1,16 +1,15 @@ -#!/bin/sh +#!/bin/bash #------------------------------------------------------------------------------ # 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 # 25/09/2023 : YOU - simplification du passage des paramètres +# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et bonnes pratiques #------------------------------------------------------------------------------ -#------------------------------------------------------------------------------ -# fonction init : c'est ici qu'il faut modifier toutes les variables liées -# à l'environnement -#------------------------------------------------------------------------------ -export ORACLE_OWNER=oracle + +# Ajout de set -o pipefail pour la gestion des erreurs dans les pipes +set -o pipefail #------------------------------------------------------------------------------ # fonction d'aide @@ -22,7 +21,7 @@ echo " syntaxe : $0 ORACLE_SID ------ " -exit $1 +exit } #f_help @@ -30,12 +29,12 @@ exit $1 #------------ MAIN ---------------------- #---------------------------------------- -ORACLE_SID=$1 +ORACLE_SID= [ "${ORACLE_SID}" ] || f_help 2; #------------------------------------------------------------------------------ -# inititalisation des variables d'environnement +# initialisation des variables d'environnement #------------------------------------------------------------------------------ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) @@ -52,21 +51,30 @@ fi # Charger les variables d'environnement depuis le fichier .env source "$ENV_FILE" +#------------------------------------------------------------------------------ +# Variables attendues dans le fichier .env : +#------------------------------------------------------------------------------ +# ORACLE_OWNER : propritaire des binaires oracle (ex: oracle) +# EXP_LOCATION : répertoire de stockage des exports (ex: /u01/export) +# DPDIR : nom de l'objet DIRECTORY oracle (ex: DATA_PUMP_DIR) +# NTFY_URL : URL pour les notifications d'erreur (service ntfy.sh) +# NLS_LANG : partie base de la variable NLS_LANG (ex: FRENCH_FRANCE) +#------------------------------------------------------------------------------ + #------------------------------------------------------------------------------ # si ce n'est pas le user oracle qui lance le script, on quitte #------------------------------------------------------------------------------ -if (test `whoami` != $ORACLE_OWNER) -then +if [[ "$(whoami)" != "$ORACLE_OWNER" ]]; then echo "Vous devez etre $ORACLE_OWNER pour lancer ce script" - exit + exit 1 fi #------------------------------------------------------------------------------ # positionner les variables d'environnement ORACLE -# et vérifier si ORACLE_SID est dans /etc/orata +# et vérifier si ORACLE_SID est dans /etc/oratab #------------------------------------------------------------------------------ -# vérifier si ORACLE_SID est pésente dans le fichier /etc/oratab +# vérifier si ORACLE_SID est pré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 @@ -95,8 +103,8 @@ NLS_CHARACTERSET=$(echo $NLS_CHARACTERSET | sed 's/^\s*//g') # on complète la variable NLS_LANG qui vient du fichier .env avec la variable NLS_CHARACTERSET export NLS_LANG="${NLS_LANG}.${NLS_CHARACTERSET}" -# creation du repertoire de sauvegarde. S'il existe la commande install ne fait rien -install -d ${EXP_LOCATION} +# creation du repertoire de sauvegarde. S'il existe la commande ne fait rien +mkdir -p ${EXP_LOCATION} #------------------------------------------------------------------------------ # creation du répertoire DPDIR au niveau de la base @@ -124,11 +132,11 @@ cd ${EXP_LOCATION} tar cfz export_${ORACLE_SID}.tgz export_${ORACLE_SID}.{dmp,log} && rm -f export_${ORACLE_SID}.dmp #------------------------------------------------------------------------------ -# Mail si des erreurs dans le fichier de sauvegarde +# Notification en cas d'erreur dans le fichier de sauvegarde #------------------------------------------------------------------------------ EXPDP_LOG_FILE=${EXP_LOCATION}/export_${ORACLE_SID}.log -ERR_COUNT=$(egrep "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE} | wc -l) -MSG=$(egrep "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE}) +ERR_COUNT=$(grep -E "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE} | wc -l) +MSG=$(grep -E "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE}) if [ ${ERR_COUNT} -ne 0 ]; then curl -H "t: Erreur expdp base ${ORACLE_SID} sur le serveur $(hostname)" -d "$MSG" -L ${NTFY_URL} diff --git a/export_datapump_alldb.sh b/export_datapump_alldb.sh index 05ee15b..e93cdac 100755 --- a/export_datapump_alldb.sh +++ b/export_datapump_alldb.sh @@ -1,13 +1,14 @@ -#!/bin/sh +#!/bin/bash #------------------------------------------------------------------------------ # ORACLE DATABASE : EXPDP ALL DB #------------------------------------------------------------------------------ # Historique : # 21/04/2023 : YOU - Creation : export datapump de toutes les bases ouvertes +# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ -# inititalisation des variables d'environnement +# initialisation des variables d'environnement #------------------------------------------------------------------------------ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) @@ -16,7 +17,7 @@ export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) # toutes les bases ouvertes sont sauvegardées par le expdp #------------------------------------------------------------------------------ -for i in $(ps -ef | grep pmon | grep -v grep | cut -d_ -f3 | egrep -v '+ASM|+APX') +for i in $(ps -ef | grep pmon | grep -v grep | cut -d_ -f3 | grep -Ev '+ASM|+APX') do - sh ${SCRIPTS_DIR}/export_datapump.sh $i + bash ${SCRIPTS_DIR}/export_datapump.sh $i done diff --git a/get_db_infos.sh b/get_db_infos.sh index d261c9e..fb14827 100755 --- a/get_db_infos.sh +++ b/get_db_infos.sh @@ -1,5 +1,7 @@ -#!/bin/sh - +#!/bin/bash +#------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : performance et robustesse #------------------------------------------------------------------------ # Script pour récupérer les paramètres des bases avant migration # Exemple de sortie : @@ -17,72 +19,97 @@ # ora12os7.local,orcl1120,orcl1120,NOARCHIVELOG,NO,NO,NO #------------------------------------------------------------------------ -f_sql_param() { - param=$(sqlplus -s '/ as sysdba' << EOF - set pages 0 feedback off; - select value from v\$parameter where name='$1'; -EOF -) - echo "$param" -} #f_sql_param - - -f_nls_param() { - param=$(sqlplus -s '/ as sysdba' << EOF - set pages 0 feedback off; - select value from nls_database_parameters where PARAMETER='$1'; -EOF -) - echo "$param" -} #f_nls_param - -f_db_param() { - param=$(sqlplus -s '/ as sysdba' << EOF - set pages 0 feedback off; - select $1 from v\$database; -EOF -) - echo "$param" -} #f_db_param - -f_ins_host_name() { - param=$(sqlplus -s '/ as sysdba' << EOF - set pages 0 feedback off; - select host_name from v\$instance; -EOF -) - echo "$param" -} - export ORAENV_ASK=NO +# Consolidate SID discovery +# Exclude ASM and APX instances +ORACLE_SIDS=($(ps -ef | grep pmon | grep -Ev 'grep|\+ASM|\+APX' | awk '{print $8}' | cut -d_ -f3)) -echo db_name,db_unique_name,global_names,db_domain,compatible,service_names,memory_target,sga_target,pga_aggregate_target,processes,open_cursors -ps -ef | grep pmon | grep -v grep | awk '{print $8}' | cut -d_ -f3 | while read sid -do - export ORACLE_SID=${sid} - . oraenv -s +# SQL query for the first block of parameters +SQL_BLOCK1=" +set pagesize 0 feedback off heading off verify off +select + (select host_name from v\$instance) || ',' || + (select value from v\$parameter where name='db_name') || ',' || + (select value from v\$parameter where name='db_unique_name') || ',' || + (select value from v\$parameter where name='global_names') || ',' || + (select value from v\$parameter where name='db_domain') || ',' || + (select value from v\$parameter where name='compatible') || ',' || + (select value from v\$parameter where name='service_names') || ',' || + (select value from v\$parameter where name='memory_target') || ',' || + (select value from v\$parameter where name='sga_target') || ',' || + (select value from v\$parameter where name='pga_aggregate_target') || ',' || + (select value from v\$parameter where name='processes') || ',' || + (select value from v\$parameter where name='open_cursors') +from dual; +" - echo $(f_ins_host_name),$(f_sql_param "db_name"),$(f_sql_param "db_unique_name"),$(f_sql_param "global_names"),$(f_sql_param "db_domain"),$(f_sql_param "compatible"),$(f_sql_param "service_names"),$(f_sql_param "memory_target"),$(f_sql_param "sga_target"),$(f_sql_param "pga_aggregate_target"),$(f_sql_param "processes"),$(f_sql_param "open_cursors") +# SQL query for the second block of parameters +SQL_BLOCK2=" +set pagesize 0 feedback off heading off verify off +select + (select host_name from v\$instance) || ',' || + (select value from v\$parameter where name='db_name') || ',' || + (select value from v\$parameter where name='db_unique_name') || ',' || + (select value from nls_database_parameters where PARAMETER='NLS_CHARACTERSET') || ',' || + (select value from nls_database_parameters where PARAMETER='NLS_NCHAR_CHARACTERSET') || ',' || + (select value from nls_database_parameters where PARAMETER='NLS_SORT') || ',' || + (select value from nls_database_parameters where PARAMETER='NLS_LANGUAGE') || ',' || + (select value from nls_database_parameters where PARAMETER='NLS_TERRITORY') +from dual; +" + +# SQL query for the third block of parameters +SQL_BLOCK3=" +set pagesize 0 feedback off heading off verify off +select + (select host_name from v\$instance) || ',' || + (select value from v\$parameter where name='db_name') || ',' || + (select value from v\$parameter where name='db_unique_name') || ',' || + LOG_MODE || ',' || + FORCE_LOGGING || ',' || + SUPPLEMENTAL_LOG_DATA_PL || ',' || + FLASHBACK_ON +from v\$database; +" + +# Print headers +echo "db_name,db_unique_name,global_names,db_domain,compatible,service_names,memory_target,sga_target,pga_aggregate_target,processes,open_cursors" + +# Loop through each discovered SID +for sid in "${ORACLE_SIDS[@]}"; do + export ORACLE_SID="${sid}" + . oraenv -s > /dev/null 2>&1 # Suppress oraenv output + + # Check if the database is actually up and accessible + if sqlplus -s / as sysdba <<< "select 1 from dual;" >/dev/null 2>&1; then + sqlplus -s / as sysdba <<< "$SQL_BLOCK1" | sed 's/^\s*//;s/\s*$//' + else + echo "ERROR: Could not connect to ${ORACLE_SID}. Skipping." >&2 + fi done echo "---------" -echo db_name,db_unique_name,NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET,NLS_SORT,NLS_LANGUAGE,NLS_TERRITORY -ps -ef | grep pmon | grep -v grep | awk '{print $8}' | cut -d_ -f3 | while read sid -do - export ORACLE_SID=${sid} - . oraenv -s +echo "db_name,db_unique_name,NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET,NLS_SORT,NLS_LANGUAGE,NLS_TERRITORY" - echo $(f_ins_host_name),$(f_sql_param "db_name"),$(f_sql_param "db_unique_name"),$(f_nls_param "NLS_CHARACTERSET"),$(f_nls_param "NLS_NCHAR_CHARACTERSET"),$(f_nls_param "NLS_SORT"),$(f_nls_param "NLS_LANGUAGE"),$(f_nls_param "NLS_TERRITORY") +for sid in "${ORACLE_SIDS[@]}"; do + export ORACLE_SID="${sid}" + . oraenv -s > /dev/null 2>&1 + + if sqlplus -s / as sysdba <<< "select 1 from dual;" >/dev/null 2>&1; then + sqlplus -s / as sysdba <<< "$SQL_BLOCK2" | sed 's/^\s*//;s/\s*$//' + fi done echo "---------" -echo db_name,db_unique_name,LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_PL,FLASHBACK_ON -ps -ef | grep pmon | grep -v grep | awk '{print $8}' | cut -d_ -f3 | while read sid -do - export ORACLE_SID=${sid} - . oraenv -s +echo "db_name,db_unique_name,LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_PL,FLASHBACK_ON" - echo $(f_ins_host_name),$(f_sql_param "db_name"),$(f_sql_param "db_unique_name"),$(f_db_param "LOG_MODE"),$(f_db_param "FORCE_LOGGING"),$(f_db_param "SUPPLEMENTAL_LOG_DATA_PL"),$(f_db_param "FLASHBACK_ON") +for sid in "${ORACLE_SIDS[@]}"; do + export ORACLE_SID="${sid}" + . oraenv -s > /dev/null 2>&1 + + if sqlplus -s / as sysdba <<< "select 1 from dual;" >/dev/null 2>&1; then + sqlplus -s / as sysdba <<< "$SQL_BLOCK3" | sed 's/^\s*//;s/\s*$//' + fi done diff --git a/is_primary.sh b/is_primary.sh index c6206c6..60dede6 100755 --- a/is_primary.sh +++ b/is_primary.sh @@ -1,3 +1,8 @@ +#!/bin/bash +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse +#------------------------------------------------------------------------------ # # retourne true si la base est primaire # @@ -8,7 +13,7 @@ f_help() { echo -echo syntax : is_primary.sh ORACLE_SID +echo "syntax : $0 ORACLE_SID" echo exit $1 @@ -18,14 +23,14 @@ exit $1 ORACLE_SID=$1 -[ "${ORACLE_SID}" ] || f_help 2; +[ -n "${ORACLE_SID}" ] || f_help 2; # positionner les variables d'environnement ORACLE export ORACLE_SID -# vérifier si ORACLE_SID est dans /etc/orata +# vérifier si ORACLE_SID est dans /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" + echo "Base ${ORACLE_SID} absente du fichier /etc/oratab ... fin du script" >&2 exit 2 fi diff --git a/is_standby.sh b/is_standby.sh index 6526dea..6b9c8d2 100755 --- a/is_standby.sh +++ b/is_standby.sh @@ -1,3 +1,8 @@ +#!/bin/bash +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse +#------------------------------------------------------------------------------ # # retourne true si la base est standby # @@ -8,7 +13,7 @@ f_help() { echo -echo syntax : is_standby.sh ORACLE_SID +echo "syntax : $0 ORACLE_SID" echo exit $1 @@ -18,14 +23,14 @@ exit $1 ORACLE_SID=$1 -[ "${ORACLE_SID}" ] || f_help 2; +[ -n "${ORACLE_SID}" ] || f_help 2; # positionner les variables d'environnement ORACLE export ORACLE_SID -# vérifier si ORACLE_SID est dans /etc/orata +# vérifier si ORACLE_SID est dans /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" + echo "Base ${ORACLE_SID} absente du fichier /etc/oratab ... fin du script" >&2 exit 2 fi diff --git a/purge_listener.sh b/purge_listener.sh index 5665a60..56d0802 100755 --- a/purge_listener.sh +++ b/purge_listener.sh @@ -1,25 +1,22 @@ #!/bin/bash -#. /home/oracle/.bash_profile +#------------------------------------------------------------------------------ +# Ce script est conçu pour purger les anciens fichiers de log des listeners Oracle. +# Il peut détecter automatiquement les listeners actifs ou cibler des listeners spécifiques. +# Il offre des options pour définir la durée de rétention, un mode verbeux et un mode "dry-run". +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : syntaxe, lisibilité et robustesse +#------------------------------------------------------------------------------ # Find the FULL path of the script, and add the directory it is in to the PATH, # Thus effectively allowing all ohter scripts to be used # (They shoud be in the same directory....) MYFULLNAME="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")" -MYDIR=`dirname ${MYFULLNAME}` +MYDIR=$(dirname "${MYFULLNAME}") PATH=${PATH}:${MYDIR} -MYNAME=`basename ${0}` +MYNAME=$(basename "${0}") LANG=C -############# -test_instance() -{ - ps -ef | grep pmon_${ORACLE_SID} | grep -v grep | grep -- ${ORACLE_SID} >/dev/null - if [ $? -eq 1 ]; then - return 1 - else - return 0 - fi -} usage() { @@ -41,6 +38,7 @@ LISTENERS_LIST= KEEPTIME=60 CMD="rm" DRY=0 +VERBOSE=0 while getopts "hdvl:k:" OPTION; do case ${OPTION} in @@ -68,11 +66,11 @@ while getopts "hdvl:k:" OPTION; do esac done -if [ -z ${LISTENERS_LIST} ]; +if [[ -z "${LISTENERS_LIST}" ]]; then # No listener given? Catch them all! - LISTENERS_LIST=`ps -ef | grep tnslsnr | grep -v grep |awk '{ print $9 }'` - if [[ $VERBOSE -ne 0 ]]; + LISTENERS_LIST=$(ps -ef | grep tnslsnr | grep -v grep |awk '{ print $9 }') + if [[ "${VERBOSE}" -ne 0 ]]; then echo "Currently active listeners: ${LISTENERS_LIST}." @@ -81,67 +79,68 @@ fi for LISTENER in ${LISTENERS_LIST}; do - if [[ $VERBOSE -ne 0 ]]; then + if [[ "${VERBOSE}" -ne 0 ]]; then echo "Treating listener ${LISTENER}:" fi # Fetching the ORACLE_HOME for the listener, based on the executable's name... - OH_BIN=`ps -ef | grep "tnslsnr ${LISTENER} " | grep -v grep | awk '{ print $8 }'` - OH_BIN=`dirname ${OH_BIN}` - export ORACLE_HOME=`dirname ${OH_BIN}` - if [[ $VERBOSE -ne 0 ]]; + OH_BIN=$(ps -ef | grep "tnslsnr ${LISTENER} " | grep -v grep | awk '{ print $8 }') + OH_BIN=$(dirname "${OH_BIN}") + export ORACLE_HOME=$(dirname "${OH_BIN}") + if [[ "${VERBOSE}" -ne 0 ]]; then echo "The ORACLE_HOME is ${ORACLE_HOME}" fi - if ${ORACLE_HOME}/bin/lsnrctl status ${LISTENER} >/dev/null 2>&1 ; + if "${ORACLE_HOME}"/bin/lsnrctl status "${LISTENER}" >/dev/null 2>&1 ; then - LOGFILE=`${ORACLE_HOME}/bin/lsnrctl status ${LISTENER} | grep "^Listener Log File" | awk '{print $4}'` - BASE=`basename ${LOGFILE}` - DIR=`dirname ${LOGFILE}` + LOGFILE=$("${ORACLE_HOME}"/bin/lsnrctl status "${LISTENER}" | grep "^Listener Log File" | awk '{print $4}') + BASE=$(basename "${LOGFILE}") + DIR=$(dirname "${LOGFILE}") - if [[ ${BASE} == "log.xml" ]]; then + if [[ "${BASE}" == "log.xml" ]]; then VERSION=11 else VERSION=10 fi - if [[ $VERBOSE -ne 0 ]]; then + if [[ "${VERBOSE}" -ne 0 ]]; then PRINT="-print " echo "this is a v${VERSION} listener, with logfile ${BASE} in ${DIR}." else PRINT="" fi - if [[ ${VERSION} -eq 11 ]]; + if [[ "${VERSION}" -eq 11 ]]; then # Purge the lingering *.xlm logfiles in there - find ${DIR} -name "log_*.xml" -mtime +${KEEPTIME} ${PRINT} -exec ${CMD} {} \; + find "${DIR}" -name "log_*.xml" -mtime "+${KEEPTIME}" ${PRINT} -exec ${CMD} {} \; # now forge the ${DIR} into some v10 compatible one: - DIR=`dirname ${DIR}`/trace + DIR=$(dirname "${DIR}")/trace # and ${LOGFILE} as well: - # First some magic to get the filename (Oracls ${DIR} | grep -i ${LISTENER}".log$"le uses lowercase sometimes) - LOGFILE=`ls ${DIR} | grep -i ${LISTENER}".log$"` + # First some magic to get the filename (Oracle uses lowercase sometimes) + LOGFILE=$(ls "${DIR}" | grep -i "${LISTENER}.log$") # And prepend the directory's name - LOGFILE=${DIR}"/"${LOGFILE} + LOGFILE="${DIR}"/"${LOGFILE}" # And continue as if we were in v10... - BASE=`basename ${LOGFILE}` - DIR=`dirname ${LOGFILE}` + BASE=$(basename "${LOGFILE}") + DIR=$(dirname "${LOGFILE}") fi # Copy the listener*.log - DATETIME=`date +%Y%m%d_%H%M%S` - if [[ $VERBOSE -ne 0 ]]; then + DATETIME=$(date +%Y%m%d_%H%M%S) + if [[ "${VERBOSE}" -ne 0 ]]; then echo "Saving ${LOGFILE} to ${LOGFILE}_${DATETIME}" fi - if [[ ${DRY} -eq 0 ]]; then - cp ${LOGFILE} ${LOGFILE}_${DATETIME} && > ${LOGFILE} + if [[ "${DRY}" -eq 0 ]]; then + cp "${LOGFILE}" "${LOGFILE}_${DATETIME}" && > "${LOGFILE}" else echo "Would have moved ${LOGFILE} to ${LOGFILE}_${DATETIME}, and truncated ${LOGFILE}". fi - find ${DIR} -name "${BASE}_*" -mtime +${KEEPTIME} ${PRINT} -exec ${CMD} {} \; + find "${DIR}" -name "${BASE}_*" -mtime "+${KEEPTIME}" ${PRINT} -exec ${CMD} {} \; else echo "Listener ${LISTENER} not responding." fi done + diff --git a/show_alert.sh b/show_alert.sh index 2cc058f..51c5e63 100755 --- a/show_alert.sh +++ b/show_alert.sh @@ -1,5 +1,10 @@ #!/bin/bash +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et efficacité +#------------------------------------------------------------------------------ + LANG=C COL_NORMAL=$(tput sgr0) COL_ROUGE=$(tput setaf 1) @@ -48,8 +53,7 @@ show_alert() -e "s,.*WARNING.*,${COL_VIOLET}&${COL_NORMAL},g" \ -e "s,.*(ERROR:|ORA-|drop|DROP|Delete).*,${GRAS}${COL_ROUGE}&${COL_NORMAL},g" \ -e "s,^(ARC|RFS|LNS|MRP).*,${COL_BLUE}&${COL_NORMAL},g" \ - -e "s,.*(Online Redo|online redo|Current log).*,${COL_CYAN}&${COL_NORMAL},g" \ - -e "s,.*,${COL_NORMAL}&${COL_NORMAL}," + -e "s,.*(Online Redo|online redo|Current log).*,${COL_CYAN}&${COL_NORMAL},g" } @@ -88,7 +92,7 @@ fi # determiner si c'est une instance DB ou ASM # si l'instant est ASM alors le sous reprtoire est asm, sinon rdbms #-------------------------------------------- -if [ "$(echo ${ORACLE_SID} | tr A-Z a-z | grep asm)" ]; then +if [[ "${ORACLE_SID}" == "+ASM"* ]]; then SUB_DIR="asm" else SUB_DIR="rdbms" @@ -97,7 +101,7 @@ fi #-------------------------------------------- # determiner si l'instance est dans /etc/oratab #-------------------------------------------- -if [ $(cat /etc/oratab | grep "^${ORACLE_SID}:" | grep -v grep | wc -l) -eq 0 ] ; +if ! grep -q "^${ORACLE_SID}:" /etc/oratab ; then # pas d'entrée dans /etc/oratab echo "-----" @@ -109,7 +113,7 @@ fi #-------------------------------------------- # determiner si l'instance est démarrée ou pas #-------------------------------------------- -if [ $(ps -ef | grep pmon_${ORACLE_SID}\$ | grep -v grep | wc -l) -eq 1 ] ; +if pgrep -f "pmon_${ORACLE_SID}$" >/dev/null ; then # instance démarrée, on lui demande le chemin vers l'alertlog @@ -118,13 +122,15 @@ then export ORAENV_ASK=NO . oraenv -s >/dev/null - SQL1="set head off" - SQL2="select value from v\$parameter where name='diagnostic_dest';" - DIAG_DEST=$(echo -e "$SQL1\n$SQL2" | sqlplus -s / as sysdba | grep -v "^$") - - SQL1="set head off" - SQL2="select value from v\$parameter where name='db_unique_name';" - DB_UNIQ_NAME=$(echo -e "$SQL1\n$SQL2" | sqlplus -s / as sysdba | grep -v "^$") + SQL_QUERY=" + set pagesize 0 feedback off heading off verify off + select value from v\$parameter where name='diagnostic_dest'; + select value from v\$parameter where name='db_unique_name'; + " + # Exécute la requête SQL, filtre les lignes vides/blanches, et supprime les espaces en début/fin de ligne + SQL_OUTPUT=$(echo -e "$SQL_QUERY" | sqlplus -s / as sysdba | grep -vE '^\s*$' | sed 's/^\s*//g;s/\s*$//g') + DIAG_DEST=$(echo "$SQL_OUTPUT" | head -n 1) + DB_UNIQ_NAME=$(echo "$SQL_OUTPUT" | tail -n 1) F_ALERT="${DIAG_DEST}/diag/${SUB_DIR}/$(echo ${DB_UNIQ_NAME} | tr 'A-Z' 'a-z')/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log" else @@ -144,7 +150,7 @@ then else echo echo "-----" - echo "----- le fichier : ${COL_ROUGE}${GRAS_ARR_PLAN}${F_ALERT}${COL_NORMAL} est introuvable !!" + echo "----- le fichier : ${COL_ROUGE}${GRAS}${F_ALERT}${COL_NORMAL} est introuvable !!" echo "-----" echo exit 1 diff --git a/show_listener_log.sh b/show_listener_log.sh index 78f8f97..bda38e9 100755 --- a/show_listener_log.sh +++ b/show_listener_log.sh @@ -1,5 +1,10 @@ #!/bin/bash +#------------------------------------------------------------------------------ +# Historique : +# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et efficacité +#------------------------------------------------------------------------------ + LANG=C COL_NORMAL=$(tput sgr0) COL_ROUGE=$(tput setaf 1) @@ -32,11 +37,11 @@ EOF #-------------------------------------------- #--------------- Fonction d'affichage coloré du fichier log #-------------------------------------------- -show_alert() +show_listener_log() { echo ${COL_ROUGE} echo =========== - echo Fichier alert : ${TRC_LOG} + echo Fichier log Listener : ${TRC_LOG} echo Ctrl + C pour quitter echo =========== echo ${COL_NORMAL} @@ -46,8 +51,7 @@ show_alert() -e "s,^($(date +'%Y-%m-%d')).*,${COL_JAUNE}&${COL_NORMAL},g" \ -e "s,.*WARNING.*,${COL_VIOLET}&${COL_NORMAL},g" \ -e "s,.*(ERROR:|ORA-|TNS-).*,${GRAS}${COL_ROUGE}&${COL_NORMAL},g" \ - -e "s,.*(stop|start|Start).*,${COL_CYAN}&${COL_NORMAL},g" \ - -e "s,.*,${COL_NORMAL}&${COL_NORMAL}," + -e "s,.*(stop|start|Start).*,${COL_CYAN}&${COL_NORMAL},g" } @@ -92,14 +96,14 @@ UPPER_LISTENER_NAME=$(echo ${LISTENER_NAME} | tr 'a-z' 'A-Z') # determiner si le listener est démarrée ou pas -if [ $(ps -ef | grep "tnslsnr ${UPPER_LISTENER_NAME}" | grep -v grep | wc -l) -eq 1 ] ; +if pgrep -f "tnslsnr ${UPPER_LISTENER_NAME}" >/dev/null ; then # listener démarré, on lui demande le chemin vers le fichier log - TRC_DIR=$(lsnrctl show trc_directory ${UPPER_LISTENER_NAME} | grep "^LISTENER parameter" | cut -d' ' -f6) + TRC_DIR=$(lsnrctl show trc_directory ${UPPER_LISTENER_NAME} | grep "TRC_DIRECTORY =" | cut -d'=' -f2 | tr -d '[:space:]"') TRC_LOG=${TRC_DIR}/${LOWER_LISTENER_NAME}.log else # le listener n'est pas démarré, on récupère le chemin par défaut - DIAG_DEST=$(adrci exec="SHOW BASE" | grep -o '".*"' | tr -d '"') + DIAG_DEST=$(adrci exec="SHOW BASE" | grep "ADR base is" | cut -d'"' -f2) H_NAME=$(hostname | cut -d. -f1) TRC_LOG="${DIAG_DEST}/diag/tnslsnr/${H_NAME}/${LOWER_LISTENER_NAME}/trace/${LOWER_LISTENER_NAME}.log" fi @@ -109,10 +113,10 @@ fi #-------------------------------------------- if [ -e "${TRC_LOG}" ] then - show_alert + show_listener_log else echo - echo "le fichier : ${COL_ROUGE}${GRAS_ARR_PLAN}${TRC_LOG}${COL_NORMAL} est introuvable !!" + echo "le fichier : ${COL_ROUGE}${GRAS}${TRC_LOG}${COL_NORMAL} est introuvable !!" echo exit 1 echo