158 lines
4.9 KiB
Bash
Executable File
158 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#------------------------------------------------------------------------------
|
|
# Historique :
|
|
# 10/11/2025 : Gemini - Améliorations : lisibilité, robustesse et efficacité
|
|
#------------------------------------------------------------------------------
|
|
|
|
LANG=C
|
|
COL_NORMAL=$(tput sgr0)
|
|
COL_ROUGE=$(tput setaf 1)
|
|
COL_VERT=$(tput setaf 2)
|
|
COL_JAUNE=$(tput setaf 3)
|
|
COL_BLUE=$(tput setaf 4)
|
|
COL_VIOLET=$(tput setaf 5)
|
|
COL_CYAN=$(tput setaf 6)
|
|
COL_BLANC=$(tput setaf 7)
|
|
COL_GRIS=$(tput setaf 8)
|
|
GRAS=$(tput bold)
|
|
|
|
#--------------------------------------------
|
|
#--------------- fonction usage()
|
|
#--------------------------------------------
|
|
usage()
|
|
{
|
|
cat << EOF
|
|
usage: $(basename $0) options
|
|
|
|
Le script trouve le chemin vers le fichier alertlog et fait un "tail -f" sur ce fichier
|
|
|
|
OPTIONS:
|
|
-h Affiche ce message
|
|
-i Nom de l'instance (par default = \$ORACLE_SID)
|
|
EOF
|
|
}
|
|
|
|
|
|
#--------------------------------------------
|
|
#--------------- Fonction d'affichage coloré du fichier alertlog
|
|
#--------------------------------------------
|
|
show_alert()
|
|
{
|
|
echo ${COL_ROUGE}
|
|
echo ===========
|
|
echo Fichier alert : ${F_ALERT}
|
|
echo Ctrl + C pour quitter
|
|
echo ===========
|
|
echo ${COL_NORMAL}
|
|
|
|
tail -20f ${F_ALERT} | sed -E \
|
|
-e "s,^($(date +'%a %b')).*,${COL_JAUNE}&${COL_NORMAL},g" \
|
|
-e "s,^($(date +'%Y-%m-%d')).*,${COL_JAUNE}&${COL_NORMAL},g" \
|
|
-e "s,^(ALTER|alter|CREATE|create).*,${GRAS}${COL_VERT}&${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,^(ARC|RFS|LNS|MRP).*,${COL_BLUE}&${COL_NORMAL},g" \
|
|
-e "s,.*(Online Redo|online redo|Current log).*,${COL_CYAN}&${COL_NORMAL},g"
|
|
|
|
}
|
|
|
|
#--------------------------------------------
|
|
#--------------- MAIN
|
|
#--------------------------------------------
|
|
|
|
INSTANCE=${ORACLE_SID}
|
|
|
|
#--------------------------------------------
|
|
# Traitement des paramètres de la ligne de commande
|
|
#--------------------------------------------
|
|
while getopts "hi:" OPTION; do
|
|
case ${OPTION} in
|
|
h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
i)
|
|
ORACLE_SID=${OPTARG}
|
|
;;
|
|
?)
|
|
usage
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "${ORACLE_SID}" ];
|
|
then
|
|
echo "\$ORACLE_SID non définie et pas d'INSTANCE en paramètre (-i)."
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------
|
|
# determiner si c'est une instance DB ou ASM
|
|
# si l'instant est ASM alors le sous reprtoire est asm, sinon rdbms
|
|
#--------------------------------------------
|
|
if [[ "${ORACLE_SID}" == "+ASM"* ]]; then
|
|
SUB_DIR="asm"
|
|
else
|
|
SUB_DIR="rdbms"
|
|
fi
|
|
|
|
#--------------------------------------------
|
|
# determiner si l'instance est dans /etc/oratab
|
|
#--------------------------------------------
|
|
if ! grep -q "^${ORACLE_SID}:" /etc/oratab ;
|
|
then
|
|
# pas d'entrée dans /etc/oratab
|
|
echo "-----"
|
|
echo "----- Pas d'entrée dans le fichier /etc/oratab"
|
|
echo "-----"
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------
|
|
# determiner si l'instance est démarrée ou pas
|
|
#--------------------------------------------
|
|
if pgrep -f "pmon_${ORACLE_SID}$" >/dev/null ;
|
|
then
|
|
# instance démarrée, on lui demande le chemin vers l'alertlog
|
|
|
|
# Potionner les variables d'environnement
|
|
export ORACLE_SID
|
|
export ORAENV_ASK=NO
|
|
. oraenv -s >/dev/null
|
|
|
|
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
|
|
# la base n'est pas démarrée, on récupère le chemin par défaut "uniquename/INSTANCE_NAME"
|
|
|
|
DIAG_DEST=$($ORACLE_HOME/bin/adrci exec="SHOW BASE" | grep -o '".*"' | tr -d '"')
|
|
F_ALERT="${DIAG_DEST}/diag/${SUB_DIR}/$(echo ${ORACLE_SID} | tr 'A-Z' 'a-z')/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log"
|
|
fi
|
|
|
|
|
|
#--------------------------------------------
|
|
# affichage du fichier alertlog
|
|
#--------------------------------------------
|
|
if [ -e "${F_ALERT}" ]
|
|
then
|
|
show_alert
|
|
else
|
|
echo
|
|
echo "-----"
|
|
echo "----- le fichier : ${COL_ROUGE}${GRAS}${F_ALERT}${COL_NORMAL} est introuvable !!"
|
|
echo "-----"
|
|
echo
|
|
exit 1
|
|
echo
|
|
fi |