Провера Oracle алерт-лога путем ‘crontab’ скрипте
Овом скриптом можете проверавати на, рецимо, сваких сат времена стање алерт-лога – те уколико се појави нова ORA грешка или упозорење – да вам стигне на имејл. Наравно, ако вам је алерт-лог огроман (већи од рецимо 2GB), идеално би било да га архивирате (промена имена је сигурна опција) те да исти крене од нуле одмах после прве итерације (рецимо ALTER SYSTEM SWITCH LOGFILE).
Претпоставка је да сте Oracle инсталирали по упутству са овог линка (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
Nisam Rasista
11/05/2017 @ 12:06
Pičiš ti neku svoju priču i briga te za šta se traži i šta se čita. Cenim