Ovom skriptom možete proveravati na, recimo, svakih sat vremena stanje alert loga – te ukoliko se pojavi nova ORA greška ili upozorenje – da vam stigne na mail. Naravno, ako vam je alert log ogroman (veći od recimo 2GB), idealno bi bilo da ga arhivirate (rename je safe opcija) te da isti krene od nule odmah posle prve iteracije (recimo ALTER SYSTEM SWITCH LOGFILE).
Pretpostavka je da ste Oracle instalirali po uputstvu sa ovog linka (dakle Oracle 12c, CentOS 7, single instance).

#!/bin/bash
#########################################################################################
# Opis: Skripta za ciklicnu proveru AlertLoga za novim ORA greskama i slanje na mail
# Autor: Kompjuteras.com, Slobodni ste da skriptu koristite/menjate kako vam srcu drago
#
# Crontab primer:
# 00  *  *  *  *  /root/skripte/AlertLogProvera.sh > /tmp/CrontabAlertLogProvera.log 2>&1
#
#########################################################################################
 
shopt -s expand_aliases           # Za slucaj da mailx ima varijable
source /home/oracle/.bash_profile # Da povuce Oracle varijable
 
########################### VARIJABLE ##################################
IME_SERVERA="MyServer - $( ip addr | grep 'state UP' -A2 | grep 'inet ' | tail -n1 | awk '{print $2}' | cut -f1 -d'/')"
ALERT_LOG_LOKACIJA="${ORACLE_BASE}/diag/rdbms/${ORACLE_UNQNAME}/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log"
ARHIVA_ORA_GRESAKA="/home/oracle/.AlertLogArhivaGresaka.log"
PRIVREMENI_LOG_ORA_GRESAKA="/tmp/AlertLogPrivremenaProvera.log"
MAIL_TO="mojmejl@mejadresa.com"
#########################################################################
 
# Provera da li postoje oracle varijable
if [ -z "${ORACLE_SID}" ]     ; then echo "Fali varijabla: ORACLE_SID.     Izlazim" ; exit 100 ; fi
if [ -z "${ORACLE_BASE}" ]    ; then echo "Fali varijabla: ORACLE_BASE.    Izlazim" ; exit 101 ; fi
if [ -z "${ORACLE_UNQNAME}" ] ; then echo "Fali varijabla: ORACLE_UNQNAME. Izlazim" ; exit 102 ; fi

# Postoji li alert log, odnosno - da li mu je dobra putanja

if [ ! -f ${ALERT_LOG_LOKACIJA} ] ; then 
	echo "Nema alert loga na lokaciji ${ALERT_LOG_LOKACIJA}. Proveri to. Izlazim"   ; exit 103 
fi
 
# Pretresi sve linije ali samo one koje POCINJU sa ORA-
touch ${ARHIVA_ORA_GRESAKA}
grep -n "^ORA-" ${ALERT_LOG_LOKACIJA} | grep -v "\[], \[], \[], \[], \[], \[], \[], \[], \[], \[], \[]" > ${PRIVREMENI_LOG_ORA_GRESAKA}

 
# Nadji zadnje linije iz logova i postavi na nule ako nema nikakvih logova
ZADNJA_LINIJA_IZ_ARHIVE="`tail -n1 ${ARHIVA_ORA_GRESAKA} | cut -d: -f1 2>/dev/null`"
ZADNJA_LINIJA_IZ_PRIVRE="`tail -n1 ${PRIVREMENI_LOG_ORA_GRESAKA} | cut -d: -f1 2>/dev/null`"
if [ -z ${ZADNJA_LINIJA_IZ_ARHIVE} ] ; then ZADNJA_LINIJA_IZ_ARHIVE=0 ; fi
if [ -z ${ZADNJA_LINIJA_IZ_PRIVRE} ] ; then ZADNJA_LINIJA_IZ_PRIVRE=0 ; fi
 
# Vizuelna provera za crontab log
date ; echo ZADNJA_LINIJA_IZ_ARHIVE=$ZADNJA_LINIJA_IZ_ARHIVE ; echo ZADNJA_LINIJA_IZ_PRIVRE=$ZADNJA_LINIJA_IZ_PRIVRE
 
# Obrada - ako se zadnje linije razlikuju
if [ "${ZADNJA_LINIJA_IZ_ARHIVE}" -ne "${ZADNJA_LINIJA_IZ_PRIVRE}" ] ; then
        if [ ${ZADNJA_LINIJA_IZ_ARHIVE} -eq 0 ] ; then
        cat ${PRIVREMENI_LOG_ORA_GRESAKA} >> ${ARHIVA_ORA_GRESAKA}
        tac ${PRIVREMENI_LOG_ORA_GRESAKA} | mail -s "${IME_SERVERA}: Pregled svih ora gresaka" ${MAIL_TO}
        exit 0
        fi
echo "Please check full log in ${ALERT_LOG_LOKACIJA}.
=====================================================
`grep -A900000 "${ZADNJA_LINIJA_IZ_ARHIVE}:" ${PRIVREMENI_LOG_ORA_GRESAKA} | grep -v "${ZADNJA_LINIJA_IZ_ARHIVE}:"`
=====================================================
" | mail -s "${IME_SERVERA}: Nova ORA u AlertLogu" ${MAIL_TO}
# ------- Apend nove greske u arhivu -----------
grep -A900000 "${ZADNJA_LINIJA_IZ_ARHIVE}:" ${PRIVREMENI_LOG_ORA_GRESAKA} | grep -v "${ZADNJA_LINIJA_IZ_ARHIVE}:" >> ${ARHIVA_ORA_GRESAKA}
fi
 
exit 0