Skip to main content

shell script to check oracle alert log

#!/bin/ksh
######################################################
# alert_log_mail.ksh
# Purpose: email error msg in alert log to DBA
# to use it, run thisscript.ksh instancename or ALL
################################################################################
if [ $# -eq 0 ]
then
echo "Usage: `basename $0` | ALL "
exit
else
OPTION=$*
fi

if [ "$OPTION" = "ALL" -o "$OPTION" = "all" ]
then
DB_LIST=`cat /etc/oratab|grep -v ^#|grep -v agent|grep -v Apach|grep -v ^$|awk -F: '{print $1}'`
else
DB_LIST=$OPTION
fi


export DBLOG=/home/oracle/dba/logs

get_msg(){
FILENAME=$1
MSG=$2
if [ -s ${DBLOG}/$(basename ${FILENAME}).mail ]
then
CKPOINT=`tail -1 ${DBLOG}/$(basename ${FILENAME}).mail|awk -F: '{print $1}'`
else
CKPOINT=0
fi
FILESIZE=`cat $FILENAME|wc -l`
if [ $FILESIZE -lt $CKPOINT ]; then CKPOINT=0; fi
STARTPOINT=`expr ${CKPOINT} + 1 `
tail +${STARTPOINT} ${FILENAME}|head -$(expr ${FILESIZE} - ${STARTPOINT} + 1)|egrep -i "${MSG}"|tail -r > ${DBLOG}/$(basename ${FILENAME}).m
sg
}

###########################################################
# Main Program
###########################################################
for db in $DB_LIST
do

if [ -z "`cat /etc/oratab|grep -v ^#|grep -v agent|grep -v Apach|grep -v ^$|awk -F: '{print $1}'|grep $db`" ]
then
echo "there is not db named $db defined in the server"
continue
fi
echo $db

get_msg /oracle/admin/$db/bdump/alert_$db.log "ora-|^Mon |^Tue |^Wed |^Thu |^Fri |^Sat |^Sun "

> $DBLOG/$(basename ${FILENAME}).mail

PRE_FLAG=0
cat ${DBLOG}/$(basename ${FILENAME}).msg|while read L
do
CUR_LINE=$L
if echo $CUR_LINE|egrep -i "ora-|error"
then
FLAG=1
else
FLAG=0
fi

case $PRE_FLAG in
0) if [ $FLAG == 1 ];then echo $CUR_LINE >> $DBLOG/$(basename ${FILENAME}).mail;fi; PRE_FLAG=$FLAG ;;
1) echo $CUR_LINE >> $DBLOG/$(basename ${FILENAME}).mail; PRE_FLAG=$FLAG ;;
esac

done


if [ -s ${DBLOG}/$(basename ${FILENAME}).mail ]; then tail -r ${DBLOG}/$(basename ${FILENAME}).mail|mailx -s "${db}: Alert log error message
" DBA@MAILSERVER.COM; fi


echo "${FILESIZE}:" >> ${DBLOG}/$(basename ${FILENAME}).mail
rm ${DBLOG}/$(basename ${FILENAME}).msg

done

exit

Comments

Popular posts from this blog

Opatch apply/lsinventory error: oneoff is corrupted or does not exist

I am applying the quarterly patch for 19c RDBMS, I tried using napply but failed, but somehow it corrupted the inventory though nothing applied. further apply and lsinventory command ran into error like this: $ ./OPatch/opatch lsinventory Oracle Interim Patch Installer version 12.2.0.1.21 Copyright (c) 2020, Oracle Corporation.  All rights reserved. Oracle Home       : /u02/app/oracle/19.0.0 Central Inventory : /u01/app/oraInventory    from           : /u02/app/oracle/19.0.0/oraInst.loc OPatch version    : 12.2.0.1.21 OUI version       : 12.2.0.7.0 Log file location : /u02/app/oracle/19.0.0/cfgtoollogs/opatch/opatch2020-09-08_13-35-59PM_1.log Lsinventory Output file location : /u02/app/oracle/19.0.0/cfgtoollogs/opatch/lsinv/lsinventory2020-09-08_13-35-59PM.txt -------------------------------------------------------------------------------- Inventory load failed... OPatch cannot load inventory for the given Oracle Home. LsInventorySession failed: Unable to create patchObject Possible ca

non-existent process lock port on windows server

I have a database link created between oracle and sqlserver using oracle tg4odbc, the product is installed on windows server and run as service "OracleOraGtw11g_home1TNSListener", but sometime the service cannot started, the root cause of this problem is that the port number 1521 is used by an non-existent process. The first step is to use netstat -bano|find "1521" to get the process id, in my case it's 5844, which shows the connection is from my oracle server 10.8.0.169 H:\>netstat -bano|find "1521"   TCP    0.0.0.0:1521           0.0.0.0:0              LISTENING       5844   TCP    10.14.45.33:1521       10.8.0.169:42987       ESTABLISHED     5844 however the process id does not show in either task manager or process explorer. The next step is to run tcpview, which shows non-existent under process column, there are three rows, two show status as "listening", the other one shows status "established", right click and k

shell script to clean up oracle dumpfile

https://github.com/iacosta/personal/blob/master/shells/cleanhouse.sh #!/bin/ksh # # Script used to cleanup any Oracle environment. # # Cleans:      audit_file_dest #              background_dump_dest #              core_dump_dest #              user_dump_dest #              Clusterware logs # # Rotates:     Alert Logs #              Listener Logs # # Scheduling:  00 00 * * * /networkdrive/dba/scripts/purge/cleanup.sh -d 7 > /u01/dba/bin/cleanup.log 2>&1 # # Created By:  Lei Dao # # # RM="rm -f" RMDIR="rm -rf" LS="ls -l" MV="mv" TOUCH="touch" TESTTOUCH="echo touch" TESTMV="echo mv" TESTRM=$LS TESTRMDIR=$LS SUCCESS=0 FAILURE=1 TEST=0 HOSTNAME=`hostname` ORAENV="oraenv" TODAY=`date +%Y%m%d` ORIGPATH=/usr/local/bin:$PATH ORIGLD=$LD_LIBRARY_PATH export PATH=$ORIGPATH # Usage function. f_usage(){   echo "Usage: `basename $0` -d DAYS [-a DAYS] [-b DAYS] [