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)
|
||||
# 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)"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 <<CATEOF
|
||||
syntax : $O ORACLE_SID
|
||||
syntax : $0 ORACLE_SID
|
||||
|
||||
CATEOF
|
||||
exit $1
|
||||
@@ -33,7 +37,12 @@ exit $1
|
||||
#------------------------------------------------------------------------------
|
||||
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
|
||||
|
||||
|
||||
@@ -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} <<EOF
|
||||
validate check logical database;
|
||||
EOF
|
||||
else
|
||||
# run {
|
||||
echo "
|
||||
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
|
||||
CONFIGURE DEVICE TYPE DISK PARALLELISM $PARALLELISM ;
|
||||
CONFIGURE RETENTION POLICY TO REDUNDANCY ${BKP_REDUNDANCY};
|
||||
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;
|
||||
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;
|
||||
CROSSCHECK ARCHIVELOG ALL;
|
||||
DELETE NOPROMPT OBSOLETE;
|
||||
DELETE NOPROMPT EXPIRED BACKUPSET;
|
||||
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 \"CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}.ora'' FROM SPFILE\";
|
||||
" > ${RMAN_CMD_FILE}
|
||||
# }
|
||||
cat > ${RMAN_CMD_FILE} <<EOF
|
||||
alter session set nls_date_format='DD/MM/YYYY HH24:MI:SS' ;
|
||||
CONFIGURE DEVICE TYPE DISK PARALLELISM ${PARALLELISM} ;
|
||||
CONFIGURE RETENTION POLICY TO REDUNDANCY ${BKP_REDUNDANCY};
|
||||
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;
|
||||
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;
|
||||
CROSSCHECK ARCHIVELOG ALL;
|
||||
DELETE NOPROMPT OBSOLETE;
|
||||
DELETE NOPROMPT EXPIRED BACKUPSET;
|
||||
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 "CREATE PFILE=''${BKP_LOCATION}/pfile_${ORACLE_SID}.ora'' FROM SPFILE";
|
||||
EOF
|
||||
fi
|
||||
#------------------------------------------------------------------------------
|
||||
# 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}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# 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 "^ORA-[0-9]:" ${BKP_LOG_FILE} | wc -l)
|
||||
ERR_COUNT=$(egrep "^RMAN-[0-9]*|^ORA-[0-9]:" ${BKP_LOG_FILE} | wc -l)
|
||||
|
||||
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}
|
||||
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 -------------------------"
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
#------------------------------------------------------------------------------
|
||||
# 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)
|
||||
@@ -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
|
||||
|
||||
@@ -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 <DBNAME>"
|
||||
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
|
||||
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
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
|
||||
# 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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user