Otra ayuda, bueno es importante revisar siempre (y de manera constante) el archivo de alertas de Oracle llamado alert_sid.log por lo cual he creado un script que lo va revisando y en caso de encontrar algun “ORA-” envia una alerta por e-mail. Ojo que esto es para ambiente linux/unix y esta creado para no comunicarse con la base de datos es decir no estable conexión alguna.
El proceso consta de dos shell:
- call_alertlog.sh: Shell que cuando es ejecutada va llamado al archivo alertlog.sh segun la cantidad de instancias que hayan en un servidor.
- alertlog.sh: Shell que recibe de parametros “el nombre de la instancia”, “ruta en donde se ubica el archivo de alertas” y por ultimo el “nombre del servidor”. Cuando se ejecuta por primera vez busca en el archivo de alertas el texo “ORA-” y si lo encuentra las envia por e-mail luego deja una copia del archivo de alertas en el directorio en donde se aloja esta shell. Cuando se vuelve a ejecutar, verifica que existe una copia del archivo de alertas y la compara con el original, y de la comparación busca el texto “ORA-” y si lo encuentra las envia por e-mail luego nuevamente deja una copia del archivo de alertas en el directorio en donde se aloja esta shell y asi se va repitiendo el ciclo.
Archivo 1: call_alertlog.sh
#!/bin/bash
# Javier Perez - javierperezdiaz@e-japd.com
# ———————————–
/home/oracle/bin/mon_alertlog/alertlog.sh “ifoping” “/oracle_database/oraInventory/admin/oceano/bdump” “OCEANO”
exit 0
Archivo 2: alertlog.sh
#!/bin/bash
# Javier Perez - javierperezdiaz@e-japd.com
# ———————————-
# ——————-
# Recupera parametros
ORA_SID=$1
ORA_BASE=$2
MAQUINA=$3
# ————————
# Declaracion de variables
DIR_BASE=”/home/oracle/bin/mon_alertlog” —> Ruta en donde esta situada la shell
DIR_BDUMP=”$ORA_BASE”
FILE_ALERTLOG=”$DIR_BDUMP/alert_$ORA_SID.log”
FILE_ALERTLOG_TMP=”$DIR_BASE/alert_$ORA_SID.log”
FILE_ALERTLOG_DIFF=”$DIR_BASE/diff_alert_$ORA_SID.log”
FILE_EMAIL=”$DIR_BASE/email_$ORA_SID.log”
# Envie email
# ———–
sMAIL=”javierperezdiaz@e-japd.com” —> Correo de destino, se pueden agregar mas separandolos por coma “,”
FECHA=`date +”%d%m%Y%H”`
FECHA2=`date +”%d-%m-%Y %H:%M”`
echo “|||||| INICIO VERIFICACION ALERT.LOG $ORA_SID de $MAQUINA|||||”
if [ -f $FILE_ALERTLOG_TMP ]
then
echo “Existe copia de alert.log, se buscan diferencias con el original …”
if cmp -s $FILE_ALERTLOG $FILE_ALERTLOG_TMP
then
echo “No existen diferencias entre los alert.log desde el ultimo analisis …”
else
echo “Diferencias encontradas desde el ultimo analisis, generando archivo de diferencias …”
diff $FILE_ALERTLOG $FILE_ALERTLOG_TMP|cat > $FILE_ALERTLOG_DIFF
echo “Buscando alertas en archivo de diferencias …”
sDIFERENCIAS=`grep “ORA-” $FILE_ALERTLOG_DIFF`
echo “$sDIFERENCIAS” > $FILE_EMAIL
if [ "$sDIFERENCIAS" == "" ]
then
echo “No existen alertas en archivo de diferencias …”
else
echo “Alertas encontradas, enviado aviso …”
for u in $sMAIL
do
more “$FILE_EMAIL” |mail -s “ALERT_${ORA_SID}.LOG ${FECHA2}” $u
done
fi
cp $FILE_ALERTLOG $FILE_ALERTLOG_TMP
fi
else
echo “No existe copia alert.log, generando copia …”
cp $FILE_ALERTLOG $FILE_ALERTLOG_TMP
echo “Buscando alertas en copia de alert.log …”
sDIFERENCIAS=`grep “ORA-” $FILE_ALERTLOG_TMP`
echo “$sDIFERENCIAS” > $FILE_EMAIL
if [ "$sDIFERENCIAS" == "" ]
then
echo “No existen alertas …”
else
echo “Alertas encontradas, enviado aviso …”
for u in $sMAIL
do
more “$FILE_EMAIL” |mail -s “ALERT_${ORA_SID}.LOG ${FECHA2}” $u
done
fi
fi
exit 0
Bueno me a dado buenos resultado y lo comparto, obviamente es mejorable y se aceptan recomendaciones. Saludos!!!.
PD: Los sources … call_alertlog.sh y alertlog.sh