Last active
February 3, 2021 21:39
-
-
Save haballan/d24b0cf9f20ad3e40a96 to your computer and use it in GitHub Desktop.
Shell Script To Clean Up Oracle Logs and rotate DB & Listener alertlogs http://dba-tips.blogspot.com/2014/02/oracle-logs-cleanup-script.html
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ################################################################################### | |
| # This script Backup & Cleanup the database logs. | |
| # To be run by ORACLE user | |
| # [Ver 2.0] | |
| # # # # | |
| # Author: Mahmmoud ADEL # # # # ### | |
| # Created: 03-06-2013 # # # # # | |
| # Modified: 02-07-2013 | |
| # 14-01-2014 Customized the script to run on various environments. | |
| # 14-06-2017 Increased the script accuracy and elimiated tar bug. | |
| # 15-05-2018 Added the option of archiving Audit log files. | |
| # 27-12-2018 Verify the trace/log locations are valid before cleaning. | |
| # 23-01-2019 Added the option of Skipping backing up the trace/logs. | |
| # 03-07-2020 Enhance locating the listener's log. | |
| # 03-07-2020 Enhance locating the alertlog/bdump/cdump location. | |
| # | |
| # | |
| # ################################################################################### | |
| SCRIPT_NAME="oracle_cleanup" | |
| # ########### | |
| # Description: | |
| # ########### | |
| echo | |
| echo "==================================================================" | |
| echo "This script will Back up & Delete the database logs and Audit logs ..." | |
| echo "==================================================================" | |
| echo | |
| sleep 1 | |
| # ####################################### | |
| # Excluded INSTANCES: | |
| # ####################################### | |
| # Here you can mention the instances the script will IGNORE and will NOT run against: | |
| # Use pipe "|" as a separator between each instance name. | |
| # e.g. Excluding: -MGMTDB, ASM instances: | |
| EXL_DB="\-MGMTDB|ASM|APX" #Excluded INSTANCES [Will not get reported offline]. | |
| # ########################### | |
| # Listing Available Instances: | |
| # ########################### | |
| # Count Instance Numbers: | |
| INS_COUNT=$( ps -ef|grep pmon|grep -v grep|egrep -v ${EXL_DB}|wc -l ) | |
| # Exit if No DBs are running: | |
| if [ $INS_COUNT -eq 0 ] | |
| then | |
| echo No Database Running ! | |
| exit | |
| fi | |
| # If there is ONLY one DB set it as default without prompt for selection: | |
| if [ $INS_COUNT -eq 1 ] | |
| then | |
| export ORACLE_SID=$( ps -ef|grep pmon|grep -v grep|egrep -v ${EXL_DB}|awk '{print $NF}'|sed -e 's/ora_pmon_//g'|grep -v sed|grep -v "s///g" ) | |
| # If there is more than one DB ASK the user to select: | |
| elif [ $INS_COUNT -gt 1 ] | |
| then | |
| echo | |
| echo "Select the Instance You Want To Backup & Delete It's Logs: [Enter the Number]" | |
| echo "----------------------------------------------------------" | |
| select DB_ID in $( ps -ef|grep pmon|grep -v grep|egrep -v ${EXL_DB}|awk '{print $NF}'|sed -e 's/ora_pmon_//g'|grep -v sed|grep -v "s///g" ) | |
| do | |
| if [ -z "${REPLY##[0-9]*}" ] | |
| then | |
| export ORACLE_SID=$DB_ID | |
| echo | |
| echo Selected Instance: | |
| echo "********" | |
| echo $DB_ID | |
| echo "********" | |
| break | |
| else | |
| export ORACLE_SID=${REPLY} | |
| break | |
| fi | |
| done | |
| fi | |
| # Exit if the user selected a Non Listed Number: | |
| if [ -z "${ORACLE_SID}" ] | |
| then | |
| echo "You've Entered An INVALID ORACLE_SID" | |
| exit | |
| fi | |
| # ######################### | |
| # Getting ORACLE_HOME | |
| # ######################### | |
| ORA_USER=`ps -ef|grep ${ORACLE_SID}|grep pmon|grep -v grep|egrep -v ${EXL_DB}|grep -v "\-MGMTDB"|awk '{print $1}'|tail -1` | |
| USR_ORA_HOME=`grep -i "^${ORA_USER}:" /etc/passwd| cut -f6 -d ':'|tail -1` | |
| # SETTING ORATAB: | |
| if [ -f /etc/oratab ] | |
| then | |
| ORATAB=/etc/oratab | |
| export ORATAB | |
| ## If OS is Solaris: | |
| elif [ -f /var/opt/oracle/oratab ] | |
| then | |
| ORATAB=/var/opt/oracle/oratab | |
| export ORATAB | |
| fi | |
| # ATTEMPT1: Get ORACLE_HOME using pwdx command: | |
| PMON_PID=`pgrep -lf _pmon_${ORACLE_SID}|awk '{print $1}'` | |
| export PMON_PID | |
| ORACLE_HOME=`pwdx ${PMON_PID}|awk '{print $NF}'|sed -e 's/\/dbs//g'` | |
| export ORACLE_HOME | |
| # ATTEMPT2: If ORACLE_HOME not found get it from oratab file: | |
| if [ ! -f ${ORACLE_HOME}/bin/sqlplus ] | |
| then | |
| ## If OS is Linux: | |
| if [ -f /etc/oratab ] | |
| then | |
| ORATAB=/etc/oratab | |
| ORACLE_HOME=`grep -v '^\#' ${ORATAB} | grep -v '^$'| grep -i "^${ORACLE_SID}:" | perl -lpe'$_ = reverse' | cut -f3 | perl -lpe'$_ = reverse' |cut -f2 -d':'` | |
| export ORACLE_HOME | |
| ## If OS is Solaris: | |
| elif [ -f /var/opt/oracle/oratab ] | |
| then | |
| ORATAB=/var/opt/oracle/oratab | |
| ORACLE_HOME=`grep -v '^\#' ${ORATAB} | grep -v '^$'| grep -i "^${ORACLE_SID}:" | perl -lpe'$_ = reverse' | cut -f3 | perl -lpe'$_ = reverse' |cut -f2 -d':'` | |
| export ORACLE_HOME | |
| fi | |
| fi | |
| # ATTEMPT3: If ORACLE_HOME is in /etc/oratab, use dbhome command: | |
| if [ ! -f ${ORACLE_HOME}/bin/sqlplus ] | |
| then | |
| ORACLE_HOME=`dbhome "${ORACLE_SID}"` | |
| export ORACLE_HOME | |
| fi | |
| # ATTEMPT4: If ORACLE_HOME is still not found, search for the environment variable: [Less accurate] | |
| if [ ! -f ${ORACLE_HOME}/bin/sqlplus ] | |
| then | |
| ORACLE_HOME=`env|grep -i ORACLE_HOME|sed -e 's/ORACLE_HOME=//g'` | |
| export ORACLE_HOME | |
| fi | |
| # ATTEMPT5: If ORACLE_HOME is not found in the environment search user's profile: [Less accurate] | |
| if [ ! -f ${ORACLE_HOME}/bin/sqlplus ] | |
| then | |
| ORACLE_HOME=`grep -h 'ORACLE_HOME=\/' ${USR_ORA_HOME}/.bash_profile ${USR_ORA_HOME}/.*profile | perl -lpe'$_ = reverse' |cut -f1 -d'=' | perl -lpe'$_ = reverse'|tail -1` | |
| export ORACLE_HOME | |
| fi | |
| # ATTEMPT6: If ORACLE_HOME is still not found, search for orapipe: [Least accurate] | |
| if [ ! -f ${ORACLE_HOME}/bin/sqlplus ] | |
| then | |
| if [ -x /usr/bin/locate ] | |
| then | |
| ORACLE_HOME=`locate -i orapipe|head -1|sed -e 's/\/bin\/orapipe//g'` | |
| export ORACLE_HOME | |
| fi | |
| fi | |
| # TERMINATE: If all above attempts failed to get ORACLE_HOME location, EXIT the script: | |
| if [ ! -f ${ORACLE_HOME}/bin/sqlplus ] | |
| then | |
| echo "Please export ORACLE_HOME variable in your .bash_profile file under oracle user home directory in order to get this script to run properly" | |
| echo "e.g." | |
| echo "export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1" | |
| exit | |
| fi | |
| # ######################################## | |
| # Exit if the user is not the Oracle Owner: | |
| # ######################################## | |
| CURR_USER=`whoami` | |
| if [ ${ORA_USER} != ${CURR_USER} ]; then | |
| echo "" | |
| echo "You're Running This Sctipt with User: \"${CURR_USER}\" !!!" | |
| echo "Please Run This Script With The Right OS User: \"${ORA_USER}\"" | |
| echo "Script Terminated!" | |
| exit | |
| fi | |
| # ######################## | |
| # Getting ORACLE_BASE: | |
| # ######################## | |
| echo "Setting ORACLE_BASE ..." | |
| # Get ORACLE_BASE from user's profile if it EMPTY: | |
| if [ ! -d "${ORACLE_BASE}" ] | |
| then | |
| ORACLE_BASE=`cat ${ORACLE_HOME}/install/envVars.properties|grep ^ORACLE_BASE|tail -1|awk '{print $NF}'|sed -e 's/ORACLE_BASE=//g'` | |
| export ORACLE_BASE | |
| fi | |
| if [ ! -d "${ORACLE_BASE}" ] | |
| then | |
| ORACLE_BASE=`grep -h 'ORACLE_BASE=\/' ${USR_ORA_HOME}/.bash* ${USR_ORA_HOME}/.*profile | perl -lpe'$_ = reverse' |cut -f1 -d'=' | perl -lpe'$_ = reverse'|tail -1` | |
| export ORACLE_BASE | |
| fi | |
| # Neutralize login.sql file: | |
| # ######################### | |
| # Existance of login.sql file under current working directory eliminates many functions during the execution of this script: | |
| if [ -f ./login.sql ] | |
| then | |
| mv ./login.sql ./login.sql_NeutralizedBy${SCRIPT_NAME} | |
| fi | |
| if [ -f ${USR_ORA_HOME}/login.sql ] | |
| then | |
| mv ${USR_ORA_HOME}/login.sql ${USR_ORA_HOME}/login.sql_NeutralizedBy${SCRIPT_NAME} | |
| fi | |
| # ######################### | |
| # Getting DB_NAME: | |
| # ######################### | |
| echo "Getting DB NAME ..." | |
| DB_NAME_RAW=$(${ORACLE_HOME}/bin/sqlplus -S "/ as sysdba" <<EOF | |
| set pages 0 feedback off lines 1000; | |
| prompt | |
| SELECT name from v\$database; | |
| exit; | |
| EOF | |
| ) | |
| # Getting DB_NAME in Uppercase & Lowercase: | |
| DB_NAME_UPPER=`echo ${DB_NAME_RAW}| perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'` | |
| DB_NAME_LOWER=$( echo "${DB_NAME_UPPER}" | tr -s '[:upper:]' '[:lower:]' ) | |
| export DB_NAME_UPPER | |
| export DB_NAME_LOWER | |
| # ######################### | |
| # Getting DB_UNQ_NAME: | |
| # ######################### | |
| VAL121=$(${ORACLE_HOME}/bin/sqlplus -S "/ as sysdba" <<EOF | |
| set pages 0 feedback off; | |
| prompt | |
| select value from v\$parameter where name='db_unique_name'; | |
| exit; | |
| EOF | |
| ) | |
| # Getting DB_NAME in Uppercase & Lowercase: | |
| DB_UNQ_NAME=`echo ${VAL121}| perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'` | |
| export DB_UNQ_NAME | |
| # In case DB_UNQ_NAME variable is empty then use DB_NAME instead: | |
| case ${DB_UNQ_NAME} in | |
| '') DB_UNQ_NAME=${DB_NAME}; export DB_UNQ_NAME;; | |
| esac | |
| if [ -d ${ORACLE_BASE}/diag/rdbms/${DB_NAME_UPPER} ] | |
| then | |
| DB_NAME=${DB_NAME_UPPER} | |
| fi | |
| if [ -d ${ORACLE_BASE}/diag/rdbms/${DB_NAME_LOWER} ] | |
| then | |
| DB_NAME=${DB_NAME_LOWER} | |
| fi | |
| if [ -d ${ORACLE_BASE}/diag/rdbms/${DB_UNQ_NAME} ] | |
| then | |
| DB_NAME=${DB_UNQ_NAME} | |
| fi | |
| export DB_NAME | |
| # ######################### | |
| # Getting ALERTLOG path: | |
| # ######################### | |
| # First Attempt: | |
| VAL_DUMP=$(${ORACLE_HOME}/bin/sqlplus -S "/ as sysdba" <<EOF | |
| set pages 0 feedback off lines 30000; | |
| prompt | |
| SELECT VALUE from V\$DIAG_INFO where name='Diag Trace'; | |
| exit; | |
| EOF | |
| ) | |
| ALERTZ=`echo ${VAL_DUMP} | perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'` | |
| ALERTDB=${ALERTZ}/alert_${ORACLE_SID}.log | |
| export ALERTDB | |
| # Second Attempt: | |
| if [ ! -f ${ALERTDB} ] | |
| then | |
| VAL_DUMP=$(${ORACLE_HOME}/bin/sqlplus -S "/ as sysdba" <<EOF | |
| set pages 0 feedback off lines 30000; | |
| prompt | |
| SELECT value from v\$parameter where NAME='background_dump_dest'; | |
| exit; | |
| EOF | |
| ) | |
| ALERTZ=`echo ${VAL_DUMP} | perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'` | |
| ALERTDB=${ALERTZ}/alert_${ORACLE_SID}.log | |
| export ALERTDB | |
| fi | |
| # Third Attempt: | |
| if [ ! -f ${ALERTDB} ] | |
| then | |
| VAL_DUMP=$(${ORACLE_HOME}/bin/sqlplus -S "/ as sysdba" <<EOF | |
| set pages 0 feedback off lines 30000; | |
| prompt | |
| SELECT value from v\$parameter where NAME='core_dump_dest'; | |
| exit; | |
| EOF | |
| ) | |
| ALERTZ=`echo ${VAL_DUMP} | perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'|sed -e 's/\/cdump/\/trace/g'` | |
| ALERTDB=${ALERTZ}/alert_${ORACLE_SID}.log | |
| export ALERTDB | |
| fi | |
| # Forth Attempt: | |
| if [ ! -f ${ALERTDB} ] | |
| then | |
| ALERTDB=${ORACLE_BASE}/diag/rdbms/${DB_NAME}/${ORACLE_SID}/trace/alert_${ORACLE_SID}.log | |
| export ALERTDB | |
| fi | |
| # Fifth Attempt: [Expensive search with locate command] | |
| if [ ! -f ${ALERTDB} ] | |
| then | |
| if [ -x /usr/bin/locate ] | |
| then | |
| ALERTDB=`ls -rtl \`locate alert_${ORACLE_SID}\`|tail -1|awk '{print $NF}'` | |
| export ALERTDB | |
| fi | |
| fi | |
| if [ -f ${ALERTDB} ] | |
| then | |
| BDUMP=`echo ${VAL_DUMP} | perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'` | |
| DUMP=`echo ${BDUMP} | sed 's/\/trace//g'` | |
| CDUMP=${DUMP}/cdump | |
| export BDUMP | |
| export DUMP | |
| export CDUMP | |
| fi | |
| echo DUMP location is: ${DUMP} | |
| echo BDUMP location is: ${BDUMP} | |
| # ######### | |
| # Variables: | |
| # ######### | |
| echo "" | |
| echo "Do you want to BACK UP the LOGFILES before Cleaning them up? [Y|N] Default is NO" | |
| echo "============================================================" | |
| while read ANS | |
| do | |
| case $ANS in | |
| y|Y|yes|YES|Yes) export BACKUP_FLAG="ON"; break ;; | |
| ""|n|N|NO|no|No) echo; export BACKUP_FLAG=""; break ;; | |
| *) echo; echo "Please enter a VALID answer [Y|N]" ;; | |
| esac | |
| done | |
| export HASH_BKP="echo #" | |
| case $BACKUP_FLAG in | |
| ON) | |
| export HASH_BKP="" | |
| echo "" | |
| echo "Please Enter The Full Path of Backup Location: [i.e. /tmp]" | |
| echo "=============================================" | |
| while read LOC1 | |
| do | |
| if [ ! -w "${LOC1}" ]; then | |
| echo "Provided Backup Location is NOT Exist/Writable !" | |
| echo | |
| echo "Please Provide a VALID Backup Location:" | |
| echo "--------------------------------------" | |
| else | |
| BKP_LOC_DB=${LOC1}/${ORACLE_SID}_DB_LOGS/`date +%d-%b-%y` | |
| /bin/mkdir -p ${BKP_LOC_DB} | |
| echo "Backup Location is: ${BKP_LOC_DB}" | |
| break | |
| fi | |
| done | |
| # Exit if the user has pressed Ctrl+D: | |
| if [ ! -w "${LOC1}" ]; then | |
| exit | |
| fi | |
| esac | |
| # Setting a Verifier: | |
| echo "" | |
| echo "Shall we go ahead with CLEANING UP LOGS and TRACES of Database \"${ORACLE_SID}\" and its Listener: [Y|N] Y" | |
| echo "===========================================================================================" | |
| while read ANS | |
| do | |
| case $ANS in | |
| ""|y|Y|yes|YES|Yes) break ;; | |
| n|N|NO|no|No) echo; echo "Script Terminated !";echo; exit; break ;; | |
| *) echo; echo "Please enter a VALID answer [Y|N]" ;; | |
| esac | |
| done | |
| echo "" | |
| echo "Do you want to Cleanup Database Audit Logs: [Y|N] Y" | |
| echo "==========================================" | |
| while read ANS | |
| do | |
| case $ANS in | |
| ""|y|Y|yes|YES|Yes) echo;export AUDIT_FILES_CLEANUP=Y ;break ;; | |
| n|N|NO|no|No) echo;export AUDIT_FILES_CLEANUP=N ;break ;; | |
| *) echo;echo "Please enter a VALID answer [Y|N]" ;; | |
| esac | |
| done | |
| INS=${ORACLE_SID} | |
| export INS | |
| # ###################### | |
| # Getting Listener name: | |
| # ###################### | |
| LSNR_COUNT=$( ps -ef|grep tnslsnr|grep -v grep|wc -l ) | |
| if [ ${LSNR_COUNT} -eq 1 ] | |
| then | |
| LSNR_NAME=$( ps -ef|grep tnslsnr|grep -v grep|awk '{print $(9)}' ) | |
| else | |
| LSNR_NAME=$( ps -ef|grep tnslsnr|grep -i "${ORACLE_SID} "|grep -v grep|awk '{print $(9)}' ) | |
| fi | |
| if [ -z "${LSNR_NAME}" ] | |
| then | |
| LSNR_NAME=LISTENER | |
| fi | |
| LISTENER_NAME=${LSNR_NAME} | |
| # ####################### | |
| # Backup & Delete DB logs: | |
| # ####################### | |
| # Exit if DUMP/BDUMP/CDUMP variables are NULL: | |
| if [ -z "${DUMP}" ] | |
| then | |
| echo "DUMP variable is NULL." | |
| echo "Script Terminated." | |
| exit | |
| fi | |
| if [ -z "${BDUMP}" ] | |
| then | |
| echo "BDUMP variable is NULL." | |
| echo "Script Terminated." | |
| exit | |
| fi | |
| if [ -z "${CDUMP}" ] | |
| then | |
| echo "CDUMP variable is NULL." | |
| echo "Script Terminated." | |
| exit | |
| fi | |
| # Exit if DUMP/BDUMP/CDUMP locations are not ACCESSIBLE: | |
| if [ ! -d ${DUMP} ] | |
| then | |
| echo "The Parent Log DUMP location cannot be Located!" | |
| echo | |
| exit | |
| fi | |
| if [ ! -d ${BDUMP} ] | |
| then | |
| echo "The Log BDUMP location cannot be Located!" | |
| echo | |
| exit | |
| fi | |
| if [ ! -d ${CDUMP} ] | |
| then | |
| echo "The Log CDUMP location cannot be Located!" | |
| echo | |
| exit | |
| fi | |
| echo "Backing up & removing DB & Listener Logs ..." | |
| sleep 1 | |
| tail -1000 ${ALERTDB} > ${BDUMP}/alert_${INS}.log.keep | |
| echo | |
| echo -e "\033[32;5mAlertlog Cleanup\033[0m" | |
| echo "Zipping the Alertlog ..." | |
| gzip -f9 ${BDUMP}/alert_${INS}.log | |
| ${HASH_BKP} echo "Backing up the Alertlog ..." | |
| ${HASH_BKP} mv -f ${BDUMP}/alert_${INS}.log.gz ${BKP_LOC_DB} | |
| echo "Rotating the Alertlog ..." | |
| mv -f ${BDUMP}/alert_${INS}.log.keep ${BDUMP}/alert_${INS}.log | |
| #tar zcvfP ${BKP_LOC_DB}/${INS}-dump-logs.tar.gz ${DUMP} | |
| ${HASH_BKP} echo "Backing up ${DUMP} ..." | |
| #find ${DUMP} -name '*' -print > ${BKP_LOC_DB}/dump_files_list.txt | |
| #tar zcfP ${BKP_LOC_DB}/${INS}-dump-logs.tar.gz --files-from ${BKP_LOC_DB}/dump_files_list.txt | |
| cd ${DUMP} | |
| ${HASH_BKP} tar zcfP ${BKP_LOC_DB}/${INS}-dump-logs.tar.gz * | |
| # Delete DB logs older than 5 days: | |
| echo | |
| echo -e "\033[32;5mDatabase Logs Cleanup\033[0m" | |
| echo "Deleting DB logs older than 5 days under ${BDUMP} ..." | |
| find ${BDUMP} -type f -name '*.trc' -mtime +5 -exec rm -f {} \; | |
| find ${BDUMP} -type f -name '*.trm' -mtime +5 -exec rm -f {} \; | |
| find ${BDUMP} -type f -name '*.log' -mtime +5 -exec rm -f {} \; | |
| echo "Deleting DB logs older than 5 days under ${DUMP}/alert ..." | |
| find ${DUMP}/alert -type f -name '*.xml' -mtime +5 -exec rm -f {} \; | |
| echo "Deleting DB logs older than 5 days under ${DUMP}/incident ..." | |
| find ${DUMP}/incident -type f -name '*.trc' -mtime +5 -exec rm -f {} \; | |
| find ${DUMP}/incident -type f -name '*.trm' -mtime +5 -exec rm -f {} \; | |
| find ${DUMP}/incident -type f -name '*.log' -mtime +5 -exec rm -f {} \; | |
| echo "Deleting DB logs older than 5 days under ${CDUMP} ..." | |
| find ${CDUMP} -type f -name '*.trc' -mtime +5 -exec rm -f {} \; | |
| find ${CDUMP} -type f -name '*.trm' -mtime +5 -exec rm -f {} \; | |
| find ${CDUMP} -type f -name '*.log' -mtime +5 -exec rm -f {} \; | |
| # Backup & Delete listener's logs: | |
| # ################################ | |
| #LISTENER_HOME=`ps -ef|grep -v grep|grep tnslsnr|grep -i ${LSNR_NAME}|awk '{print $(NF-2)}' |sed -e 's/\/bin\/tnslsnr//g'|grep -v sed|grep -v "s///g"|head -1` | |
| echo | |
| echo -e "\033[32;5mListener Logs Cleanup\033[0m" | |
| LISTENER_HOME=`ps -ef|grep -v grep|grep tnslsnr|grep "${LSNR_NAME} "|awk '{print $(8)}' |sed -e 's/\/bin\/tnslsnr//g'|grep -v sed|grep -v "s///g"|head -1` | |
| TNS_ADMIN=${LISTENER_HOME}/network/admin | |
| export TNS_ADMIN | |
| LISTENER_LOGDIR=`${LISTENER_HOME}/bin/lsnrctl status ${LISTENER_NAME}|grep "Listener Log File"| awk '{print $NF}'| sed -e 's/\/alert\/log.xml//g'` | |
| LISTENER_LOG=${LISTENER_LOGDIR}/trace/${LISTENER_NAME}.log | |
| echo LISTENER_NAME: $LISTENER_NAME | |
| echo LISTENER_HOME: $LISTENER_HOME | |
| echo TNS_ADMIN: $TNS_ADMIN | |
| # Determine if the listener name is in Upper/Lower case: | |
| if [ ! -r ${LISTENER_LOG} ] | |
| then | |
| # Listner_name is lowercase: | |
| LISTENER_NAME=$( echo ${LISTENER_NAME} | awk '{print tolower($0)}' ) | |
| export LISTENER_NAME | |
| LISTENER_LOG=${LISTENER_LOGDIR}/trace/${LISTENER_NAME}.log | |
| export LISTENER_LOG | |
| if [ ! -r ${LISTENER_LOG} ] | |
| then | |
| # Listener_name is Uppercase: | |
| LISTENER_NAME=$( echo "${LISTENER_NAME}" | awk '{print toupper($0)}' ) | |
| export LISTENER_NAME | |
| LISTENER_LOG=${LISTENER_LOGDIR}/trace/${LISTENER_NAME}.log | |
| export LISTENER_LOG | |
| echo LISTENER_LOG: $LISTENER_LOG | |
| else | |
| echo LISTENER_LOG: $LISTENER_LOG | |
| fi | |
| fi | |
| # Exit if LISTENER LOG directory is NULL: | |
| if [ -z "${LISTENER_LOGDIR}" ] | |
| then | |
| echo "LISTENER_LOGDIR variable is NULL." | |
| echo "Script Terminated." | |
| exit | |
| fi | |
| # Exit if LISTENER LOG directory is IN-ACCESSIBLE: | |
| if [ ! -d ${LISTENER_LOGDIR} ] | |
| then | |
| echo 'Listener Logs Location Cannot be Found!' | |
| echo "Script Terminated." | |
| exit | |
| fi | |
| ${HASH_BKP} echo "Backing up listener logs under: ${LISTENER_LOGDIR}/trace ..." | |
| ${HASH_BKP} cd ${LISTENER_LOGDIR}/trace | |
| ${HASH_BKP} tar zcfP ${BKP_LOC_DB}/${LISTENER_NAME}_trace.tar.gz * | |
| ${HASH_BKP} echo "Backing up listener logs under: ${LISTENER_LOGDIR}/alert ..." | |
| ${HASH_BKP} cd ${LISTENER_LOGDIR}/alert | |
| ${HASH_BKP} tar zcfP ${BKP_LOC_DB}/${LISTENER_NAME}_alert.tar.gz * | |
| tail -10000 ${LISTENER_LOGDIR}/trace/${LISTENER_NAME}.log > ${LISTENER_LOGDIR}/${LISTENER_NAME}.log.keep | |
| echo "Deleting listener logs older than 5 days under: ${LISTENER_LOGDIR}/trace ..." | |
| find ${LISTENER_LOGDIR}/trace -type f -name '*.trc' -mtime +5 -exec rm -f {} \; | |
| find ${LISTENER_LOGDIR}/trace -type f -name '*.trm' -mtime +5 -exec rm -f {} \; | |
| find ${LISTENER_LOGDIR}/trace -type f -name '*.log' -mtime +5 -exec rm -f {} \; | |
| echo "Deleting listener logs older than 5 days under: ${LISTENER_LOGDIR}/alert ..." | |
| find ${LISTENER_LOGDIR}/alert -type f -name '*.xml' -mtime +5 -exec rm -f {} \; | |
| echo "Rotating listener log ${LISTENER_LOGDIR}/trace/${LISTENER_NAME}.log ..." | |
| mv -f ${LISTENER_LOGDIR}/${LISTENER_NAME}.log.keep ${LISTENER_LOGDIR}/trace/${LISTENER_NAME}.log | |
| # ############################ | |
| # Backup & Delete AUDIT logs: | |
| # ############################ | |
| # Getting Audit Files Location: | |
| # ############################ | |
| case ${AUDIT_FILES_CLEANUP} in | |
| Y) | |
| echo | |
| echo -e "\033[32;5mAudit Logs Cleanup\033[0m" | |
| VAL_AUD=$(${ORACLE_HOME}/bin/sqlplus -S "/ as sysdba" <<EOF | |
| set pages 0 feedback off; | |
| prompt | |
| SELECT value from v\$parameter where NAME='audit_file_dest'; | |
| exit; | |
| EOF | |
| ) | |
| AUD_LOC=`echo ${VAL_AUD} | perl -lpe'$_ = reverse' |awk '{print $1}'|perl -lpe'$_ = reverse'` | |
| # Exit if AUDIT LOG variable is NULL: | |
| if [ -z "${AUD_LOC}" ] | |
| then | |
| echo "AUD_LOC variable is NULL." | |
| echo "Script Terminated." | |
| exit | |
| fi | |
| if [ -d ${AUD_LOC} ] | |
| then | |
| #tar zcvfP ${BKP_LOC_DB}/audit_files.tar.gz ${AUD_LOC}/${ORACLE_SID}_* | |
| #find ${AUD_LOC} -type f -name '${ORACLE_SID}_*.aud' -print > ${BKP_LOC_DB}/audit_files_list.txt | |
| #tar zcvfP ${BKP_LOC_DB}/${INS}-audit-logs.tar.gz --files-from ${BKP_LOC_DB}/audit_files_list.txt | |
| ${HASH_BKP} echo "Backing up Audit files under: ${AUD_LOC} ..." | |
| ${HASH_BKP} cd ${AUD_LOC} | |
| ${HASH_BKP} tar zcfP ${BKP_LOC_DB}/${INS}-audit-logs.tar.gz ${ORACLE_SID}_*.aud | |
| # Delete Audit logs older than 5 days | |
| echo "Deleting Audit files older than 5 days under: ${AUD_LOC} ..." | |
| find ${AUD_LOC} -type f -name "${ORACLE_SID}_*.aud" -mtime +5 -exec rm -f {} \; | |
| else | |
| # Exit if AUDIT LOG directory is IN-ACCESSIBLE: | |
| echo "Audit Files Location Cannot be Found!" | |
| exit | |
| fi | |
| ;; | |
| esac | |
| echo "" | |
| echo "------------------------------------" | |
| ${HASH_BKP} echo "Old logs are backed up under: ${BKP_LOC_DB}" | |
| echo "The Last 5 Days Logs are KEPT." | |
| echo "CLEANUP COMPLETED." | |
| echo "------------------------------------" | |
| echo | |
| # De-Neutralize login.sql file: | |
| # ############################ | |
| # If login.sql was renamed during the execution of the script revert it back to its original name: | |
| if [ -f ./login.sql_NeutralizedBy${SCRIPT_NAME} ] | |
| then | |
| mv ./login.sql_NeutralizedBy${SCRIPT_NAME} ./login.sql | |
| fi | |
| if [ -f ${USR_ORA_HOME}/login.sql_NeutralizedBy${SCRIPT_NAME} ] | |
| then | |
| mv ${USR_ORA_HOME}/login.sql_NeutralizedBy${SCRIPT_NAME} ${USR_ORA_HOME}/login.sql | |
| fi | |
| # ############# | |
| # END OF SCRIPT | |
| # ############# | |
| # REPORT BUGS to: <mahmmoudadel@hotmail.com>. | |
| # DISCLAIMER: THIS SCRIPT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY. IT IS PROVIDED "AS IS". | |
| # DOWNLOAD THE LATEST VERSION OF DATABASE ADMINISTRATION BUNDLE FROM: | |
| # http://dba-tips.blogspot.com/2014/02/oracle-database-administration-scripts.html |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment