From 4c11c1f982f711e014aeab4b41879ce1fefd42fa Mon Sep 17 00:00:00 2001 From: Yacine31 Date: Fri, 26 Nov 2021 06:54:13 +0100 Subject: [PATCH] Create purge_listener.sh --- purge_listener.sh | 147 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 purge_listener.sh diff --git a/purge_listener.sh b/purge_listener.sh new file mode 100644 index 0000000..5665a60 --- /dev/null +++ b/purge_listener.sh @@ -0,0 +1,147 @@ +#!/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