Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> RE: tcl script for listener alert
FYI, I couldn't find any TCL examples, so I wrote a ksh version to do this.
What I haven't had time to do is add in something for dealing with the
listener being down for an extended time, not sending email every x minutes,
instead once on being down, once on being back up again.
He's the code, in case anyone's interested:
############################################################################
###
#
# listener_error_check.ksh
#
# This script will check for any new errors found in the listener's
logfile.
# As part of this check, it will also validate that the listener is up.
This
# job is a crutch for OEM until this functionality is available within OEM.
#
# Arguments
# -p Optional argument to signify that the listener is
# encrypted password protected.
# -t <TNS_ADMIN> This value is required if you are using this
# env variable.
#
# Maintenance History
#
# Date Name/Description
# ------------
. $ORACLE_BASE/admin/sourced_files/std_script_env.ksh
LISTENER_LOG_NAME= LISTENER_LOG_NAME_PREFIX= LISTENER_LOG_DIR= LISTENER_PASS= LISTENER_PASS_PROTECTED= LISTENER_PASS_STRING=
############################################################################
###
function USAGE
{
echo "$THISFILE -p -t <TNS_ADMIN>" exit 1
############################################################################
###
function PROCESS_LISTENER
{
RETURN_CODE_PL="0" touch $TEMP_LSNRCTL_FILE chmod 700 $TEMP_LSNRCTL_FILE if [ "$LISTENER_PASS_PROTECTED" = "YES" ]; then LISTENER_PASS=`grep "PASSWORDS_LISTENER" $TNS_ADMIN/listener.ora | cut -d' ' -f3` LISTENER_PASS_STRING="set password $LISTENER_PASS" fi# First, determine the listener's status.
#----------------------------------------\
echo "[$(date +%m/%d/%Y' '%H:%M:%S)] Checking the listener's status ..."
echo " $LISTENER_PASS_STRING status exit" | lsnrctl >>$TEMP_LSNRCTL_FILE RETURN_CODE_PL=$? if [ "$RETURN_CODE_PL" = "0" ]; then# Next, determine the listener's logfile name.
#---------------------------------------------\
LISTENER_LOG_NAME=$(cat $TEMP_LSNRCTL_FILE | grep "^Listener Log File" | awk '{print $4}')
if [ -r "$LISTENER_LOG_NAME" ]; then
#-------------------------------\
# Check for new listener errors.
#-------------------------------/
echo "[$(date +%m/%d/%Y' '%H:%M:%S)] Checking for new listener errors ..."
NEW_LISTENER_ERRORS=$(grep TNS- $LISTENER_LOG_NAME 2>/dev/null | wc -l)
if [ -r "$SAVED_ERROR_FILE" ]; then OLD_LISTENER_ERRORS=$(grep TNS- $SAVED_ERROR_FILE | wc -l) else touch $SAVED_ERROR_FILE fi if [ $NEW_LISTENER_ERRORS -gt $OLD_LISTENER_ERRORS ]; then grep TNS- $LISTENER_LOG_NAME | sed -n $((${OLD_LISTENER_ERRORS}+1))',$p' | tee -a $SAVED_ERROR_FILE RETURN_CODE_PL="1" fi else echo "[$(date +%m/%d/%Y' '%H:%M:%S)] *** Error: listener logfile is not readable: ${LISTENER_LOG_NAME}. ***" RETURN_CODE_PL="1" fi else echo "[$(date +%m/%d/%Y' '%H:%M:%S)] *** Error: listener status check failed. Listener may be down. ***" fi [[ -r "$TEMP_LSNRCTL_FILE" ]] && rm $TEMP_LSNRCTL_FILE return $RETURN_CODE_PL
############################################################################
###
COMMAND_LINE="$THISFILE $*"
echo "[$(date +%m/%d/%Y' '%H:%M:%S)] Starting script $THISFILE"
echo "[$(date +%m/%d/%Y' '%H:%M:%S)] Command line used was: $COMMAND_LINE"
while getopts "pt:" OPT
do
case $OPT in
p ) export LISTENER_PASS_PROTECTED="YES";;
#-------------------------------------------------------------------\
# TNS_ADMIN is EXPORTed because lsnrctl needs to pick up it's value.
#-------------------------------------------------------------------/
t ) export TNS_ADMIN=$OPTARG;; \?) USAGE;; * ) USAGE;;
PROCESS_LISTENER
RETURN_CODE=$?
echo "[$(date +%m/%d/%Y' '%H:%M:%S)] Finished script $THISFILE, exit status
$RETURN_CODE"
exit $RETURN_CODE
Myths Resolved: "A eye for eye, tooth for tooth, ... (Ex. 21:24) is normally quoted as justification for revenge. On the contrary, it was commanded to stop people from taking greater revenge than the original injustice."
> -----Original Message----- > From: oracle-l-bounce_at_freelists.org [mailto:oracle-l-bounce_at_freelists.org] > On Behalf Of Herring Dave - dherri > Sent: Thursday, March 03, 2005 10:19 AM > To: Oracle-L Freelists > Subject: tcl script for listener alert > > Folks - OEM comes with a nice alert check defined in the event library for > checking "alert_<dbname>.log" for new errors, but doesn't come with > anything > for checking error messages in "listener.log". Instead of me trying to > write a modified TCL script off the alert check one, does anyone out there > already have something like this? > > > Thanks. > > > > ------------------------------------- > > Dave Herring, DBA > > Acxiom Corporation > > 3333 Finley > > Downers Grove, IL 60515 > > wk: 630.944.4762 > > < <mailto:dherri_at_acxiom.com> mailto:dherri_at_acxiom.com> > > > > Myths Resolved: "A eye for eye, tooth for tooth, ... (Ex. 21:24) is > normally > quoted as justification for revenge. On the contrary, it was commanded to > stop people from taking greater revenge than the original injustice." > > ------------------------------------- > > > > > > ********************************************************************** > The information contained in this communication is > confidential, is intended only for the use of the recipient > named above, and may be legally privileged. > If the reader of this message is not the intended > recipient, you are hereby notified that any dissemination, > distribution, or copying of this communication is strictly > prohibited. > If you have received this communication in error, > please re-send this communication to the sender and > delete the original message or any copy of it from your > computer system. Thank You. > > > > -- > http://www.freelists.org/webpage/oracle-l
-- http://www.freelists.org/webpage/oracle-lReceived on Mon Mar 07 2005 - 16:25:03 CST