148 lines
3.6 KiB
Bash
Executable File
148 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#. /home/oracle/.bash_profile
|
|
|
|
# Find the FULL path of the script, and add the directory it is in to the PATH,
|
|
# Thus effectively allowing all ohter scripts to be used
|
|
# (They shoud be in the same directory....)
|
|
MYFULLNAME="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0##*/}")"
|
|
MYDIR=`dirname ${MYFULLNAME}`
|
|
PATH=${PATH}:${MYDIR}
|
|
MYNAME=`basename ${0}`
|
|
|
|
LANG=C
|
|
#############
|
|
test_instance()
|
|
{
|
|
ps -ef | grep pmon_${ORACLE_SID} | grep -v grep | grep -- ${ORACLE_SID} >/dev/null
|
|
if [ $? -eq 1 ]; then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
usage()
|
|
{
|
|
cat << EOF
|
|
usage: ${MYNAME} options
|
|
|
|
This script purges the listener's logfile(s)
|
|
|
|
OPTIONS:
|
|
-h Show this message
|
|
-l Listener name (default LISTENER)
|
|
-k Keeptime: Keep the last 'n' days of files (Default: 60 days)
|
|
-v Verbose
|
|
-d Dry-run: only list the files, do not actually delete them.
|
|
EOF
|
|
}
|
|
|
|
LISTENERS_LIST=
|
|
KEEPTIME=60
|
|
CMD="rm"
|
|
DRY=0
|
|
|
|
while getopts "hdvl:k:" OPTION; do
|
|
case ${OPTION} in
|
|
h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
l)
|
|
LISTENERS_LIST=${OPTARG}
|
|
;;
|
|
v)
|
|
VERBOSE=1
|
|
;;
|
|
d)
|
|
CMD="ls"
|
|
DRY=1
|
|
;;
|
|
k)
|
|
KEEPTIME=${OPTARG}
|
|
;;
|
|
?)
|
|
usage
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -z ${LISTENERS_LIST} ];
|
|
then
|
|
# No listener given? Catch them all!
|
|
LISTENERS_LIST=`ps -ef | grep tnslsnr | grep -v grep |awk '{ print $9 }'`
|
|
if [[ $VERBOSE -ne 0 ]];
|
|
then
|
|
echo "Currently active listeners:
|
|
${LISTENERS_LIST}."
|
|
fi
|
|
fi
|
|
|
|
for LISTENER in ${LISTENERS_LIST};
|
|
do
|
|
if [[ $VERBOSE -ne 0 ]]; then
|
|
echo "Treating listener ${LISTENER}:"
|
|
fi
|
|
|
|
# Fetching the ORACLE_HOME for the listener, based on the executable's name...
|
|
OH_BIN=`ps -ef | grep "tnslsnr ${LISTENER} " | grep -v grep | awk '{ print $8 }'`
|
|
OH_BIN=`dirname ${OH_BIN}`
|
|
export ORACLE_HOME=`dirname ${OH_BIN}`
|
|
if [[ $VERBOSE -ne 0 ]];
|
|
then
|
|
echo "The ORACLE_HOME is ${ORACLE_HOME}"
|
|
fi
|
|
if ${ORACLE_HOME}/bin/lsnrctl status ${LISTENER} >/dev/null 2>&1 ;
|
|
then
|
|
LOGFILE=`${ORACLE_HOME}/bin/lsnrctl status ${LISTENER} | grep "^Listener Log File" | awk '{print $4}'`
|
|
BASE=`basename ${LOGFILE}`
|
|
DIR=`dirname ${LOGFILE}`
|
|
|
|
if [[ ${BASE} == "log.xml" ]]; then
|
|
VERSION=11
|
|
else
|
|
VERSION=10
|
|
fi
|
|
|
|
if [[ $VERBOSE -ne 0 ]]; then
|
|
PRINT="-print "
|
|
echo "this is a v${VERSION} listener, with logfile ${BASE} in ${DIR}."
|
|
else
|
|
PRINT=""
|
|
fi
|
|
|
|
if [[ ${VERSION} -eq 11 ]];
|
|
then
|
|
# Purge the lingering *.xlm logfiles in there
|
|
find ${DIR} -name "log_*.xml" -mtime +${KEEPTIME} ${PRINT} -exec ${CMD} {} \;
|
|
|
|
# now forge the ${DIR} into some v10 compatible one:
|
|
DIR=`dirname ${DIR}`/trace
|
|
# and ${LOGFILE} as well:
|
|
# First some magic to get the filename (Oracls ${DIR} | grep -i ${LISTENER}".log$"le uses lowercase sometimes)
|
|
LOGFILE=`ls ${DIR} | grep -i ${LISTENER}".log$"`
|
|
# And prepend the directory's name
|
|
LOGFILE=${DIR}"/"${LOGFILE}
|
|
# And continue as if we were in v10...
|
|
BASE=`basename ${LOGFILE}`
|
|
DIR=`dirname ${LOGFILE}`
|
|
fi
|
|
|
|
# Copy the listener*.log
|
|
DATETIME=`date +%Y%m%d_%H%M%S`
|
|
if [[ $VERBOSE -ne 0 ]]; then
|
|
echo "Saving ${LOGFILE} to ${LOGFILE}_${DATETIME}"
|
|
fi
|
|
if [[ ${DRY} -eq 0 ]]; then
|
|
cp ${LOGFILE} ${LOGFILE}_${DATETIME} && > ${LOGFILE}
|
|
else
|
|
echo "Would have moved ${LOGFILE} to ${LOGFILE}_${DATETIME}, and truncated ${LOGFILE}".
|
|
fi
|
|
|
|
find ${DIR} -name "${BASE}_*" -mtime +${KEEPTIME} ${PRINT} -exec ${CMD} {} \;
|
|
else
|
|
echo "Listener ${LISTENER} not responding."
|
|
fi
|
|
done
|