révison des script avec gemini : organisation, commentaire et harmonisation
This commit is contained in:
23
.env.example
Normal file
23
.env.example
Normal file
@@ -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
|
||||||
50
adr_purge.sh
50
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)
|
# Purge ADR contents (adr_purge.sh)
|
||||||
# 00 05 * * 0 adr_purge.sh
|
# 00 05 * * 0 adr_purge.sh
|
||||||
# Add the above line with `crontab -e` to the oracle user's cron
|
# Add the above line with `crontab -e` to the oracle user's cron
|
||||||
|
|
||||||
ALERT_RET="129600" # 90 Days
|
# --- Configuration de la rétention en JOURS ---
|
||||||
INCIDENT_RET="43200" # 30 Days
|
ALERT_RET_DAYS=90
|
||||||
TRACE_RET="43200" # 30 Days
|
INCIDENT_RET_DAYS=30
|
||||||
CDUMP_RET="43200" # 30 Days
|
TRACE_RET_DAYS=30
|
||||||
HM_RET="43200" # 30 Days
|
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
|
adrci exec="show homes"|grep -v 'ADR Homes' | while read file_line
|
||||||
do
|
do
|
||||||
echo "INFO: adrci purging diagnostic destination " $file_line
|
echo "INFO: adrci purging diagnostic destination \"$file_line\""
|
||||||
echo "INFO: purging ALERT older than 90 days"
|
echo "INFO: purging ALERT older than $ALERT_RET_DAYS days"
|
||||||
adrci exec="set homepath $file_line;purge -age $ALERT_RET -type ALERT"
|
adrci exec="set homepath '$file_line';purge -age $ALERT_RET_MINUTES -type ALERT"
|
||||||
echo "INFO: purging INCIDENT older than 30 days"
|
echo "INFO: purging INCIDENT older than $INCIDENT_RET_DAYS days"
|
||||||
adrci exec="set homepath $file_line;purge -age $INCIDENT_RET -type INCIDENT"
|
adrci exec="set homepath '$file_line';purge -age $INCIDENT_RET_MINUTES -type INCIDENT"
|
||||||
echo "INFO: purging TRACE older than 30 days"
|
echo "INFO: purging TRACE older than $TRACE_RET_DAYS days"
|
||||||
adrci exec="set homepath $file_line;purge -age $TRACE_RET -type TRACE"
|
adrci exec="set homepath '$file_line';purge -age $TRACE_RET_MINUTES -type TRACE"
|
||||||
echo "INFO: purging CDUMP older than 30 days"
|
echo "INFO: purging CDUMP older than $CDUMP_RET_DAYS days"
|
||||||
adrci exec="set homepath $file_line;purge -age $CDUMP_RET -type CDUMP"
|
adrci exec="set homepath '$file_line';purge -age $CDUMP_RET_MINUTES -type CDUMP"
|
||||||
echo "INFO: purging HM older than 30 days"
|
echo "INFO: purging HM older than $HM_RET_DAYS days"
|
||||||
adrci exec="set homepath $file_line;purge -age $HM_RET -type HM"
|
adrci exec="set homepath '$file_line';purge -age $HM_RET_MINUTES -type HM"
|
||||||
echo ""
|
echo ""
|
||||||
echo ""
|
echo ""
|
||||||
done
|
done
|
||||||
echo
|
echo
|
||||||
echo "INFO: adrci purge finished at `date`"
|
echo "INFO: adrci purge finished at $(date)"
|
||||||
|
|
||||||
|
|||||||
@@ -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 :
|
# Historique :
|
||||||
# 25/09/2023 : YOU - premiere version pour sauvegarder les binaires
|
# 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)
|
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
|
# Charger les variables d'environnement depuis le fichier .env
|
||||||
source "$ENV_FILE"
|
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
|
# 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
|
# sauvegarde
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
cd ${BKP_APP_LOCATION}
|
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
|
rm -fv backup_bin_oraapp_*.tgz
|
||||||
# compression du repertoire oracle app avec exclusion des répertoires admin, diag et audit
|
# 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/admin" \
|
||||||
--exclude="${ORA_APP_LOCATION}/oracle/audit" \
|
--exclude="${ORA_APP_LOCATION}/oracle/audit" \
|
||||||
--exclude="${ORA_APP_LOCATION}/oracle/diag" \
|
--exclude="${ORA_APP_LOCATION}/oracle/diag" \
|
||||||
${ORA_APP_LOCATION}
|
"${ORA_APP_LOCATION}"; then
|
||||||
|
# notification de succès
|
||||||
# notification
|
curl -d "$(hostname) - backup des binaires terminée" "${NTFY_URL}"
|
||||||
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
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# ORACLE DATABASE : BACKUP RMAN DB + AL
|
# ORACLE DATABASE : BACKUP RMAN DB + AL
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
@@ -12,8 +12,12 @@
|
|||||||
# 10/08/2023 : YOU - base noarchivelog : execution de rman validate
|
# 10/08/2023 : YOU - base noarchivelog : execution de rman validate
|
||||||
# 25/09/2023 : YOU - simplification, 1 seul parametre pour le script
|
# 25/09/2023 : YOU - simplification, 1 seul parametre pour le script
|
||||||
# 25/07/2024 : YOU - fichier .env pour les variables d'environnement
|
# 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
|
# fonction d'aide
|
||||||
@@ -21,7 +25,7 @@
|
|||||||
f_help() {
|
f_help() {
|
||||||
|
|
||||||
cat <<CATEOF
|
cat <<CATEOF
|
||||||
syntax : $O ORACLE_SID
|
syntax : $0 ORACLE_SID
|
||||||
|
|
||||||
CATEOF
|
CATEOF
|
||||||
exit $1
|
exit $1
|
||||||
@@ -33,7 +37,12 @@ exit $1
|
|||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
f_print()
|
f_print()
|
||||||
{
|
{
|
||||||
echo "[`date +"%Y/%m/%d %H:%M:%S"`] : $1" >> $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
|
} #f_print
|
||||||
|
|
||||||
|
|
||||||
@@ -49,7 +58,7 @@ ORACLE_SID=$1
|
|||||||
export ORACLE_SID
|
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)
|
export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
|
||||||
|
|
||||||
@@ -67,7 +76,27 @@ fi
|
|||||||
source "$ENV_FILE"
|
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
|
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"
|
||||||
@@ -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
|
# si ce n'est pas le user oracle qui lance le script, on quitte
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
if (test `whoami` != $ORACLE_OWNER)
|
if [[ "$(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"
|
||||||
@@ -95,10 +123,10 @@ then
|
|||||||
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
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
install -d ${BKP_LOCATION}
|
mkdir -p ${BKP_LOCATION}
|
||||||
install -d ${BKP_LOG_DIR}
|
mkdir -p ${BKP_LOG_DIR}
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# génération du script de la sauvegarde RMAN
|
# génération du script de la sauvegarde RMAN
|
||||||
@@ -139,25 +167,25 @@ EOF
|
|||||||
LOG_MODE=$(echo $LOG_MODE | sed 's/^\s*//g')
|
LOG_MODE=$(echo $LOG_MODE | sed 's/^\s*//g')
|
||||||
|
|
||||||
if [ "$LOG_MODE" == "NOARCHIVELOG" ]; then
|
if [ "$LOG_MODE" == "NOARCHIVELOG" ]; then
|
||||||
echo "validate check logical database;" > ${RMAN_CMD_FILE}
|
cat > ${RMAN_CMD_FILE} <<EOF
|
||||||
|
validate check logical database;
|
||||||
|
EOF
|
||||||
else
|
else
|
||||||
# run {
|
cat > ${RMAN_CMD_FILE} <<EOF
|
||||||
echo "
|
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
|
||||||
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
|
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};
|
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BKP_LOCATION}/ctrlfile_auto_%F';
|
||||||
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${BKP_LOCATION}/ctrlfile_auto_%F';
|
BACKUP DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/data_%T_%t_%s_%p' TAG 'DATA_${DATE_JOUR}' AS COMPRESSED BACKUPSET DATABASE;
|
||||||
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';
|
||||||
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 DEVICE TYPE DISK FORMAT '${BKP_LOCATION}/arch_%T_%t_%s_%p' TAG 'ARCH_${DATE_JOUR}' AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE ALL INPUT;
|
CROSSCHECK ARCHIVELOG ALL;
|
||||||
CROSSCHECK ARCHIVELOG ALL;
|
DELETE NOPROMPT OBSOLETE;
|
||||||
DELETE NOPROMPT OBSOLETE;
|
DELETE NOPROMPT EXPIRED BACKUPSET;
|
||||||
DELETE NOPROMPT EXPIRED BACKUPSET;
|
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}';
|
SQL "ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS ''${BKP_LOCATION}/${ORACLE_SID}_control_file.trc'' REUSE";
|
||||||
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";
|
||||||
SQL \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}.ora'' FROM SPFILE\";
|
EOF
|
||||||
" > ${RMAN_CMD_FILE}
|
|
||||||
# }
|
|
||||||
fi
|
fi
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Execution du script RMAN
|
# Execution du script RMAN
|
||||||
@@ -166,17 +194,16 @@ 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
|
# Notification en cas d'erreur dans le fichier de sauvegarde
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# ERR_COUNT=$(egrep "^RMAN-[0-9]*|^ORA-[0-9]:" ${BKP_LOG_FILE} | wc -l)
|
ERR_COUNT=$(egrep "^RMAN-[0-9]*|^ORA-[0-9]:" ${BKP_LOG_FILE} | wc -l)
|
||||||
ERR_COUNT=$(egrep "^ORA-[0-9]:" ${BKP_LOG_FILE} | wc -l)
|
|
||||||
|
|
||||||
if [ ${ERR_COUNT} -ne 0 ]; then
|
if [ ${ERR_COUNT} -ne 0 ]; then
|
||||||
curl -H "t: Erreur RMAN base ${ORACLE_SID} sur le serveur $(hostname)" -d "$(cat ${BKP_LOG_FILE})" -L ${NTFY_URL}
|
curl -H "t: Erreur RMAN base ${ORACLE_SID} sur le serveur $(hostname)" -d "$(cat ${BKP_LOG_FILE})" -L ${NTFY_URL}
|
||||||
fi
|
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 conservation déterminée par la variable : ${BKP_LOG_RETENTION}
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
f_print "------------------------- NETTOYAGE DES LOGS -------------------------"
|
f_print "------------------------- NETTOYAGE DES LOGS -------------------------"
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# ORACLE DATABASE : BACKUP ALL B
|
# ORACLE DATABASE : BACKUP ALL B
|
||||||
# sauvegarde de touts les bases ouvertes (en mode archivelog)
|
#------------------------------------------------------------------------------
|
||||||
|
# Historique :
|
||||||
|
# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
|
export SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/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
|
# 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
|
do
|
||||||
${SCRIPTS_DIR}/backup_rman.sh $b
|
bash ${SCRIPTS_DIR}/backup_rman.sh $b
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,7 +1,20 @@
|
|||||||
#!/bin/bash
|
#!/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
|
# Vérifier si le nombre d'arguments est correct
|
||||||
if [ "$#" -ne 1 ]; then
|
if [[ "$#" -ne 1 ]]; then
|
||||||
echo "Usage: $0 <DBNAME>"
|
echo "Usage: $0 <DBNAME>"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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}')
|
apply_log_gap=$(echo "$output" | awk '/Apply Log Gap/{print $4}')
|
||||||
|
|
||||||
# Test pour Transfer Log Gap
|
# 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
|
# 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
|
else
|
||||||
# Afficher un message indiquant que tout est OK
|
# 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
|
fi
|
||||||
|
|
||||||
# Test pour Apply Log Gap
|
# 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
|
# 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
|
else
|
||||||
# Afficher un message indiquant que tout est OK
|
# 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
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/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
|
# Environnement Variables
|
||||||
export NLS_DATE_FORMAT='DD/MM/YYYY HH24:MI:SS'
|
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
|
# Fonction test_dba : teste si l'utilisateur est DBA
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
if test "$(id|grep dba)"
|
if ! id | grep -q dba; then
|
||||||
then
|
|
||||||
echo > /dev/null
|
|
||||||
else
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "============================================================="
|
echo "============================================================="
|
||||||
echo " Abandon, l'utilisateur doit appartenir au groupe DBA "
|
echo " Abandon, l'utilisateur doit appartenir au groupe DBA "
|
||||||
@@ -25,29 +24,29 @@ fi
|
|||||||
# reporter toutes les instances préntes sur ce serveur
|
# 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
|
do
|
||||||
echo "-----------------------------------------------------"
|
echo "-----------------------------------------------------"
|
||||||
echo " Base de donnee a traiter: " $r
|
echo " Base de donnee a traiter: " $r
|
||||||
echo "-----------------------------------------------------"
|
echo "-----------------------------------------------------"
|
||||||
export ORACLE_SID=$r
|
export ORACLE_SID=$r
|
||||||
|
|
||||||
# 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
|
if ! grep -q "^${ORACLE_SID}:" /etc/oratab; 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"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
. oraenv -s > /dev/null
|
. oraenv -s > /dev/null
|
||||||
sqlplus -S / as sysdba << EOF
|
sqlplus -S / as sysdba << EOF
|
||||||
set head off pages 0 feedback off
|
set head off pages 0 feedback off linesize 250;
|
||||||
set linesize 250 heading off;
|
|
||||||
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
|
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
|
||||||
set heading on pagesize 999;
|
set heading on pagesize 999;
|
||||||
column status format a25;
|
column status format a25;
|
||||||
column input_bytes_display format a12;
|
column input_bytes_display format a12;
|
||||||
column output_bytes_display format a12;
|
column output_bytes_display format a12;
|
||||||
column device_type format a10;
|
column device_type format a10;
|
||||||
|
SET SERVEROUTPUT ON;
|
||||||
declare
|
declare
|
||||||
base varchar2(40) ;
|
base varchar2(40) ;
|
||||||
serv varchar2(40) ;
|
serv varchar2(40) ;
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Historique :
|
# Historique :
|
||||||
# 14/09/2011 : YOU - Creation
|
# 14/09/2011 : YOU - Creation
|
||||||
# 14/10/2015 : YOU - script générique pour toutes les bases
|
# 14/10/2015 : YOU - script générique pour toutes les bases
|
||||||
# 15/12/2022 : YOU - retention de 1 jour
|
# 15/12/2022 : YOU - retention de 1 jour
|
||||||
# 25/09/2023 : YOU - simplification du passage des paramètres
|
# 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
|
# Ajout de set -o pipefail pour la gestion des erreurs dans les pipes
|
||||||
# à l'environnement
|
set -o pipefail
|
||||||
#------------------------------------------------------------------------------
|
|
||||||
export ORACLE_OWNER=oracle
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# fonction d'aide
|
# fonction d'aide
|
||||||
@@ -22,7 +21,7 @@ echo "
|
|||||||
syntaxe : $0 ORACLE_SID
|
syntaxe : $0 ORACLE_SID
|
||||||
------
|
------
|
||||||
"
|
"
|
||||||
exit $1
|
exit
|
||||||
|
|
||||||
} #f_help
|
} #f_help
|
||||||
|
|
||||||
@@ -30,12 +29,12 @@ exit $1
|
|||||||
#------------ MAIN ----------------------
|
#------------ MAIN ----------------------
|
||||||
#----------------------------------------
|
#----------------------------------------
|
||||||
|
|
||||||
ORACLE_SID=$1
|
ORACLE_SID=
|
||||||
|
|
||||||
[ "${ORACLE_SID}" ] || f_help 2;
|
[ "${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)
|
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
|
# Charger les variables d'environnement depuis le fichier .env
|
||||||
source "$ENV_FILE"
|
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
|
# si ce n'est pas le user oracle qui lance le script, on quitte
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
if (test `whoami` != $ORACLE_OWNER)
|
if [[ "$(whoami)" != "$ORACLE_OWNER" ]]; then
|
||||||
then
|
|
||||||
echo "Vous devez etre $ORACLE_OWNER pour lancer ce script"
|
echo "Vous devez etre $ORACLE_OWNER pour lancer ce script"
|
||||||
exit
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# positionner les variables d'environnement ORACLE
|
# 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
|
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"
|
||||||
exit 2
|
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
|
# on complète la variable NLS_LANG qui vient du fichier .env avec la variable NLS_CHARACTERSET
|
||||||
export NLS_LANG="${NLS_LANG}.${NLS_CHARACTERSET}"
|
export NLS_LANG="${NLS_LANG}.${NLS_CHARACTERSET}"
|
||||||
|
|
||||||
# creation du repertoire de sauvegarde. S'il existe la commande install ne fait rien
|
# creation du repertoire de sauvegarde. S'il existe la commande ne fait rien
|
||||||
install -d ${EXP_LOCATION}
|
mkdir -p ${EXP_LOCATION}
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# creation du répertoire DPDIR au niveau de la base
|
# 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
|
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
|
EXPDP_LOG_FILE=${EXP_LOCATION}/export_${ORACLE_SID}.log
|
||||||
ERR_COUNT=$(egrep "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE} | wc -l)
|
ERR_COUNT=$(grep -E "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE} | wc -l)
|
||||||
MSG=$(egrep "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE})
|
MSG=$(grep -E "^EXP-[0-9]*|^ORA-[0-9]:" ${EXPDP_LOG_FILE})
|
||||||
|
|
||||||
if [ ${ERR_COUNT} -ne 0 ]; then
|
if [ ${ERR_COUNT} -ne 0 ]; then
|
||||||
curl -H "t: Erreur expdp base ${ORACLE_SID} sur le serveur $(hostname)" -d "$MSG" -L ${NTFY_URL}
|
curl -H "t: Erreur expdp base ${ORACLE_SID} sur le serveur $(hostname)" -d "$MSG" -L ${NTFY_URL}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# ORACLE DATABASE : EXPDP ALL DB
|
# ORACLE DATABASE : EXPDP ALL DB
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# Historique :
|
# Historique :
|
||||||
# 21/04/2023 : YOU - Creation : export datapump de toutes les bases ouvertes
|
# 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)
|
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
|
# 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
|
do
|
||||||
sh ${SCRIPTS_DIR}/export_datapump.sh $i
|
bash ${SCRIPTS_DIR}/export_datapump.sh $i
|
||||||
done
|
done
|
||||||
|
|||||||
141
get_db_infos.sh
141
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
|
# Script pour récupérer les paramètres des bases avant migration
|
||||||
# Exemple de sortie :
|
# Exemple de sortie :
|
||||||
@@ -17,72 +19,97 @@
|
|||||||
# ora12os7.local,orcl1120,orcl1120,NOARCHIVELOG,NO,NO,NO
|
# 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
|
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
|
# SQL query for the first block of parameters
|
||||||
ps -ef | grep pmon | grep -v grep | awk '{print $8}' | cut -d_ -f3 | while read sid
|
SQL_BLOCK1="
|
||||||
do
|
set pagesize 0 feedback off heading off verify off
|
||||||
export ORACLE_SID=${sid}
|
select
|
||||||
. oraenv -s
|
(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
|
done
|
||||||
|
|
||||||
echo "---------"
|
echo "---------"
|
||||||
echo db_name,db_unique_name,NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET,NLS_SORT,NLS_LANGUAGE,NLS_TERRITORY
|
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 $(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
|
done
|
||||||
|
|
||||||
echo "---------"
|
echo "---------"
|
||||||
echo db_name,db_unique_name,LOG_MODE,FORCE_LOGGING,SUPPLEMENTAL_LOG_DATA_PL,FLASHBACK_ON
|
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 $(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
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Historique :
|
||||||
|
# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# retourne true si la base est primaire
|
# retourne true si la base est primaire
|
||||||
#
|
#
|
||||||
@@ -8,7 +13,7 @@
|
|||||||
f_help() {
|
f_help() {
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo syntax : is_primary.sh ORACLE_SID
|
echo "syntax : $0 ORACLE_SID"
|
||||||
echo
|
echo
|
||||||
exit $1
|
exit $1
|
||||||
|
|
||||||
@@ -18,14 +23,14 @@ exit $1
|
|||||||
|
|
||||||
ORACLE_SID=$1
|
ORACLE_SID=$1
|
||||||
|
|
||||||
[ "${ORACLE_SID}" ] || f_help 2;
|
[ -n "${ORACLE_SID}" ] || f_help 2;
|
||||||
|
|
||||||
# positionner les variables d'environnement ORACLE
|
# positionner les variables d'environnement ORACLE
|
||||||
export ORACLE_SID
|
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
|
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
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Historique :
|
||||||
|
# 10/11/2025 : Gemini - Améliorations : lisibilité et robustesse
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# retourne true si la base est standby
|
# retourne true si la base est standby
|
||||||
#
|
#
|
||||||
@@ -8,7 +13,7 @@
|
|||||||
f_help() {
|
f_help() {
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo syntax : is_standby.sh ORACLE_SID
|
echo "syntax : $0 ORACLE_SID"
|
||||||
echo
|
echo
|
||||||
exit $1
|
exit $1
|
||||||
|
|
||||||
@@ -18,14 +23,14 @@ exit $1
|
|||||||
|
|
||||||
ORACLE_SID=$1
|
ORACLE_SID=$1
|
||||||
|
|
||||||
[ "${ORACLE_SID}" ] || f_help 2;
|
[ -n "${ORACLE_SID}" ] || f_help 2;
|
||||||
|
|
||||||
# positionner les variables d'environnement ORACLE
|
# positionner les variables d'environnement ORACLE
|
||||||
export ORACLE_SID
|
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
|
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
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
#!/bin/bash
|
#!/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,
|
# 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
|
# Thus effectively allowing all ohter scripts to be used
|
||||||
# (They shoud be in the same directory....)
|
# (They shoud be in the same directory....)
|
||||||
MYFULLNAME="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
|
MYFULLNAME="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
|
||||||
MYDIR=`dirname ${MYFULLNAME}`
|
MYDIR=$(dirname "${MYFULLNAME}")
|
||||||
PATH=${PATH}:${MYDIR}
|
PATH=${PATH}:${MYDIR}
|
||||||
MYNAME=`basename ${0}`
|
MYNAME=$(basename "${0}")
|
||||||
|
|
||||||
LANG=C
|
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()
|
usage()
|
||||||
{
|
{
|
||||||
@@ -41,6 +38,7 @@ LISTENERS_LIST=
|
|||||||
KEEPTIME=60
|
KEEPTIME=60
|
||||||
CMD="rm"
|
CMD="rm"
|
||||||
DRY=0
|
DRY=0
|
||||||
|
VERBOSE=0
|
||||||
|
|
||||||
while getopts "hdvl:k:" OPTION; do
|
while getopts "hdvl:k:" OPTION; do
|
||||||
case ${OPTION} in
|
case ${OPTION} in
|
||||||
@@ -68,11 +66,11 @@ while getopts "hdvl:k:" OPTION; do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z ${LISTENERS_LIST} ];
|
if [[ -z "${LISTENERS_LIST}" ]];
|
||||||
then
|
then
|
||||||
# No listener given? Catch them all!
|
# No listener given? Catch them all!
|
||||||
LISTENERS_LIST=`ps -ef | grep tnslsnr | grep -v grep |awk '{ print $9 }'`
|
LISTENERS_LIST=$(ps -ef | grep tnslsnr | grep -v grep |awk '{ print $9 }')
|
||||||
if [[ $VERBOSE -ne 0 ]];
|
if [[ "${VERBOSE}" -ne 0 ]];
|
||||||
then
|
then
|
||||||
echo "Currently active listeners:
|
echo "Currently active listeners:
|
||||||
${LISTENERS_LIST}."
|
${LISTENERS_LIST}."
|
||||||
@@ -81,67 +79,68 @@ fi
|
|||||||
|
|
||||||
for LISTENER in ${LISTENERS_LIST};
|
for LISTENER in ${LISTENERS_LIST};
|
||||||
do
|
do
|
||||||
if [[ $VERBOSE -ne 0 ]]; then
|
if [[ "${VERBOSE}" -ne 0 ]]; then
|
||||||
echo "Treating listener ${LISTENER}:"
|
echo "Treating listener ${LISTENER}:"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Fetching the ORACLE_HOME for the listener, based on the executable's name...
|
# 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=$(ps -ef | grep "tnslsnr ${LISTENER} " | grep -v grep | awk '{ print $8 }')
|
||||||
OH_BIN=`dirname ${OH_BIN}`
|
OH_BIN=$(dirname "${OH_BIN}")
|
||||||
export ORACLE_HOME=`dirname ${OH_BIN}`
|
export ORACLE_HOME=$(dirname "${OH_BIN}")
|
||||||
if [[ $VERBOSE -ne 0 ]];
|
if [[ "${VERBOSE}" -ne 0 ]];
|
||||||
then
|
then
|
||||||
echo "The ORACLE_HOME is ${ORACLE_HOME}"
|
echo "The ORACLE_HOME is ${ORACLE_HOME}"
|
||||||
fi
|
fi
|
||||||
if ${ORACLE_HOME}/bin/lsnrctl status ${LISTENER} >/dev/null 2>&1 ;
|
if "${ORACLE_HOME}"/bin/lsnrctl status "${LISTENER}" >/dev/null 2>&1 ;
|
||||||
then
|
then
|
||||||
LOGFILE=`${ORACLE_HOME}/bin/lsnrctl status ${LISTENER} | grep "^Listener Log File" | awk '{print $4}'`
|
LOGFILE=$("${ORACLE_HOME}"/bin/lsnrctl status "${LISTENER}" | grep "^Listener Log File" | awk '{print $4}')
|
||||||
BASE=`basename ${LOGFILE}`
|
BASE=$(basename "${LOGFILE}")
|
||||||
DIR=`dirname ${LOGFILE}`
|
DIR=$(dirname "${LOGFILE}")
|
||||||
|
|
||||||
if [[ ${BASE} == "log.xml" ]]; then
|
if [[ "${BASE}" == "log.xml" ]]; then
|
||||||
VERSION=11
|
VERSION=11
|
||||||
else
|
else
|
||||||
VERSION=10
|
VERSION=10
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $VERBOSE -ne 0 ]]; then
|
if [[ "${VERBOSE}" -ne 0 ]]; then
|
||||||
PRINT="-print "
|
PRINT="-print "
|
||||||
echo "this is a v${VERSION} listener, with logfile ${BASE} in ${DIR}."
|
echo "this is a v${VERSION} listener, with logfile ${BASE} in ${DIR}."
|
||||||
else
|
else
|
||||||
PRINT=""
|
PRINT=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ${VERSION} -eq 11 ]];
|
if [[ "${VERSION}" -eq 11 ]];
|
||||||
then
|
then
|
||||||
# Purge the lingering *.xlm logfiles in there
|
# 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:
|
# now forge the ${DIR} into some v10 compatible one:
|
||||||
DIR=`dirname ${DIR}`/trace
|
DIR=$(dirname "${DIR}")/trace
|
||||||
# and ${LOGFILE} as well:
|
# and ${LOGFILE} as well:
|
||||||
# First some magic to get the filename (Oracls ${DIR} | grep -i ${LISTENER}".log$"le uses lowercase sometimes)
|
# First some magic to get the filename (Oracle uses lowercase sometimes)
|
||||||
LOGFILE=`ls ${DIR} | grep -i ${LISTENER}".log$"`
|
LOGFILE=$(ls "${DIR}" | grep -i "${LISTENER}.log$")
|
||||||
# And prepend the directory's name
|
# And prepend the directory's name
|
||||||
LOGFILE=${DIR}"/"${LOGFILE}
|
LOGFILE="${DIR}"/"${LOGFILE}"
|
||||||
# And continue as if we were in v10...
|
# And continue as if we were in v10...
|
||||||
BASE=`basename ${LOGFILE}`
|
BASE=$(basename "${LOGFILE}")
|
||||||
DIR=`dirname ${LOGFILE}`
|
DIR=$(dirname "${LOGFILE}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy the listener*.log
|
# Copy the listener*.log
|
||||||
DATETIME=`date +%Y%m%d_%H%M%S`
|
DATETIME=$(date +%Y%m%d_%H%M%S)
|
||||||
if [[ $VERBOSE -ne 0 ]]; then
|
if [[ "${VERBOSE}" -ne 0 ]]; then
|
||||||
echo "Saving ${LOGFILE} to ${LOGFILE}_${DATETIME}"
|
echo "Saving ${LOGFILE} to ${LOGFILE}_${DATETIME}"
|
||||||
fi
|
fi
|
||||||
if [[ ${DRY} -eq 0 ]]; then
|
if [[ "${DRY}" -eq 0 ]]; then
|
||||||
cp ${LOGFILE} ${LOGFILE}_${DATETIME} && > ${LOGFILE}
|
cp "${LOGFILE}" "${LOGFILE}_${DATETIME}" && > "${LOGFILE}"
|
||||||
else
|
else
|
||||||
echo "Would have moved ${LOGFILE} to ${LOGFILE}_${DATETIME}, and truncated ${LOGFILE}".
|
echo "Would have moved ${LOGFILE} to ${LOGFILE}_${DATETIME}, and truncated ${LOGFILE}".
|
||||||
fi
|
fi
|
||||||
|
|
||||||
find ${DIR} -name "${BASE}_*" -mtime +${KEEPTIME} ${PRINT} -exec ${CMD} {} \;
|
find "${DIR}" -name "${BASE}_*" -mtime "+${KEEPTIME}" ${PRINT} -exec ${CMD} {} \;
|
||||||
else
|
else
|
||||||
echo "Listener ${LISTENER} not responding."
|
echo "Listener ${LISTENER} not responding."
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Historique :
|
||||||
|
# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et efficacité
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
LANG=C
|
LANG=C
|
||||||
COL_NORMAL=$(tput sgr0)
|
COL_NORMAL=$(tput sgr0)
|
||||||
COL_ROUGE=$(tput setaf 1)
|
COL_ROUGE=$(tput setaf 1)
|
||||||
@@ -48,8 +53,7 @@ show_alert()
|
|||||||
-e "s,.*WARNING.*,${COL_VIOLET}&${COL_NORMAL},g" \
|
-e "s,.*WARNING.*,${COL_VIOLET}&${COL_NORMAL},g" \
|
||||||
-e "s,.*(ERROR:|ORA-|drop|DROP|Delete).*,${GRAS}${COL_ROUGE}&${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,^(ARC|RFS|LNS|MRP).*,${COL_BLUE}&${COL_NORMAL},g" \
|
||||||
-e "s,.*(Online Redo|online redo|Current log).*,${COL_CYAN}&${COL_NORMAL},g" \
|
-e "s,.*(Online Redo|online redo|Current log).*,${COL_CYAN}&${COL_NORMAL},g"
|
||||||
-e "s,.*,${COL_NORMAL}&${COL_NORMAL},"
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +92,7 @@ fi
|
|||||||
# determiner si c'est une instance DB ou ASM
|
# determiner si c'est une instance DB ou ASM
|
||||||
# si l'instant est ASM alors le sous reprtoire est asm, sinon rdbms
|
# 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"
|
SUB_DIR="asm"
|
||||||
else
|
else
|
||||||
SUB_DIR="rdbms"
|
SUB_DIR="rdbms"
|
||||||
@@ -97,7 +101,7 @@ fi
|
|||||||
#--------------------------------------------
|
#--------------------------------------------
|
||||||
# determiner si l'instance est dans /etc/oratab
|
# 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
|
then
|
||||||
# pas d'entrée dans /etc/oratab
|
# pas d'entrée dans /etc/oratab
|
||||||
echo "-----"
|
echo "-----"
|
||||||
@@ -109,7 +113,7 @@ fi
|
|||||||
#--------------------------------------------
|
#--------------------------------------------
|
||||||
# determiner si l'instance est démarrée ou pas
|
# 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
|
then
|
||||||
# instance démarrée, on lui demande le chemin vers l'alertlog
|
# instance démarrée, on lui demande le chemin vers l'alertlog
|
||||||
|
|
||||||
@@ -118,13 +122,15 @@ then
|
|||||||
export ORAENV_ASK=NO
|
export ORAENV_ASK=NO
|
||||||
. oraenv -s >/dev/null
|
. oraenv -s >/dev/null
|
||||||
|
|
||||||
SQL1="set head off"
|
SQL_QUERY="
|
||||||
SQL2="select value from v\$parameter where name='diagnostic_dest';"
|
set pagesize 0 feedback off heading off verify off
|
||||||
DIAG_DEST=$(echo -e "$SQL1\n$SQL2" | sqlplus -s / as sysdba | grep -v "^$")
|
select value from v\$parameter where name='diagnostic_dest';
|
||||||
|
select value from v\$parameter where name='db_unique_name';
|
||||||
SQL1="set head off"
|
"
|
||||||
SQL2="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
|
||||||
DB_UNIQ_NAME=$(echo -e "$SQL1\n$SQL2" | sqlplus -s / as sysdba | grep -v "^$")
|
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"
|
F_ALERT="${DIAG_DEST}/diag/${SUB_DIR}/$(echo ${DB_UNIQ_NAME} | tr 'A-Z' 'a-z')/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log"
|
||||||
else
|
else
|
||||||
@@ -144,7 +150,7 @@ then
|
|||||||
else
|
else
|
||||||
echo
|
echo
|
||||||
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 "-----"
|
||||||
echo
|
echo
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# Historique :
|
||||||
|
# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et efficacité
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
LANG=C
|
LANG=C
|
||||||
COL_NORMAL=$(tput sgr0)
|
COL_NORMAL=$(tput sgr0)
|
||||||
COL_ROUGE=$(tput setaf 1)
|
COL_ROUGE=$(tput setaf 1)
|
||||||
@@ -32,11 +37,11 @@ EOF
|
|||||||
#--------------------------------------------
|
#--------------------------------------------
|
||||||
#--------------- Fonction d'affichage coloré du fichier log
|
#--------------- Fonction d'affichage coloré du fichier log
|
||||||
#--------------------------------------------
|
#--------------------------------------------
|
||||||
show_alert()
|
show_listener_log()
|
||||||
{
|
{
|
||||||
echo ${COL_ROUGE}
|
echo ${COL_ROUGE}
|
||||||
echo ===========
|
echo ===========
|
||||||
echo Fichier alert : ${TRC_LOG}
|
echo Fichier log Listener : ${TRC_LOG}
|
||||||
echo Ctrl + C pour quitter
|
echo Ctrl + C pour quitter
|
||||||
echo ===========
|
echo ===========
|
||||||
echo ${COL_NORMAL}
|
echo ${COL_NORMAL}
|
||||||
@@ -46,8 +51,7 @@ show_alert()
|
|||||||
-e "s,^($(date +'%Y-%m-%d')).*,${COL_JAUNE}&${COL_NORMAL},g" \
|
-e "s,^($(date +'%Y-%m-%d')).*,${COL_JAUNE}&${COL_NORMAL},g" \
|
||||||
-e "s,.*WARNING.*,${COL_VIOLET}&${COL_NORMAL},g" \
|
-e "s,.*WARNING.*,${COL_VIOLET}&${COL_NORMAL},g" \
|
||||||
-e "s,.*(ERROR:|ORA-|TNS-).*,${GRAS}${COL_ROUGE}&${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,.*(stop|start|Start).*,${COL_CYAN}&${COL_NORMAL},g"
|
||||||
-e "s,.*,${COL_NORMAL}&${COL_NORMAL},"
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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
|
# 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
|
then
|
||||||
# listener démarré, on lui demande le chemin vers le fichier log
|
# 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
|
TRC_LOG=${TRC_DIR}/${LOWER_LISTENER_NAME}.log
|
||||||
else
|
else
|
||||||
# le listener n'est pas démarré, on récupère le chemin par défaut
|
# 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)
|
H_NAME=$(hostname | cut -d. -f1)
|
||||||
TRC_LOG="${DIAG_DEST}/diag/tnslsnr/${H_NAME}/${LOWER_LISTENER_NAME}/trace/${LOWER_LISTENER_NAME}.log"
|
TRC_LOG="${DIAG_DEST}/diag/tnslsnr/${H_NAME}/${LOWER_LISTENER_NAME}/trace/${LOWER_LISTENER_NAME}.log"
|
||||||
fi
|
fi
|
||||||
@@ -109,10 +113,10 @@ fi
|
|||||||
#--------------------------------------------
|
#--------------------------------------------
|
||||||
if [ -e "${TRC_LOG}" ]
|
if [ -e "${TRC_LOG}" ]
|
||||||
then
|
then
|
||||||
show_alert
|
show_listener_log
|
||||||
else
|
else
|
||||||
echo
|
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
|
echo
|
||||||
exit 1
|
exit 1
|
||||||
echo
|
echo
|
||||||
|
|||||||
Reference in New Issue
Block a user