Purging Oracle Logs
The basis of this script is to purge logs from the Oracle Base directory daily
The script will be executed from cron on a daily basis, however this could run at different times on each system due to business and or system load requirements.
Technical Steps
#!/bin/ksh
#--------------------------------------------------------------------------------
#--
#-- File name: purge_logs.sh
#-- Purpose: Script is used to purge all relevant logs from the Oracle Base location.
#-- Remove Archive Logs older than one day
#--
#-- Author: Mark Young
#-- Copyright: TOLL GIS
#--
#--
#--------------------------------------------------------------------------------
#-- Usage:
#-- purge_logs.sh
#--
#-- Examples:
#-- purge_logs.sh
#--
#--
#-- Modified (MM/DD/YY)
#-- marky 6/12/11 - Creation
#--
#-- If any changes are made to this script, it must be updated in confluence
#--
#-- Location of this script
#-- http://confluence.toll.com.au/display/OPSDBA/Purge+Oracle+Log+Maintenance #-- RGM 9/11/12 - added UID to flag file for multiple users to use..
#--------------------------------------------------------------------------------
OracleBase=/usr/local/oracle/admin
#Make sure the script isn't already runningIsRunning=/tmp/.isrunning
LOGFILE=/var/local/oracle/log/purge_log.log
HOSTNAME=`hostname`
DBAMAIL=dba_team@toll.com.au
UID=`id -u`
IsRunning="/tmp/.isrunning${UID}"
if [ -d "$OracleBase" ]; then
RC=0
else
echo "Failed to find directory /usr/local/oracle/admin the script has stopped due to this error" > $LOGFILE
RC=1
fi
if [[ -f ${IsRunning} || ${RC} -gt 0 ]]; then
echo "The script is already running.. Exiting" > $LOGFILE
RC=1
else
touch $IsRunning
echo "The script is about to start"
#Process trc files, but keep files for the past 30 days
find $OracleBase -mtime +30 -type f -name "*.trc" -exec rm -rf {} \;
#Process AUD files, but keep files for the past 5 days
find $OracleBase -mtime +5 -type f -name "*.aud" -exec rm -rf {} \;
#Process txt files, but keep files for the past 7 days
find $OracleBase -mtime +7 -type f -name "*.txt" -exec rm -rf {} \;
#Process txt files, but keep files for the past 5 days
#turned this off, Oracle 12c agent creates a directory called core which is removed by this script
#find $OracleBase -mtime +5 -type d -name core -exec rm -rf {} \;
#Remove the file for next time.
rm $IsRunning
RC=$?
fi
if [ $RC -ne "0" ]; then
echo "The script failed and needs your attention" >> $LOGFILE
rm $IsRunning
mailx -s "purge_log.sh has failed on $HOSTNAME, this needs your attention" $DBAMAIL < $LOGFILE
fi
Change permissions on this file
chmod +x /usr/local/oracle/admin/scripts/ksh/purge_logs.sh
Crontab Entry
# oracle crontab placeholder # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed 30 6 * * * /usr/local/oracle/admin/scripts/ksh/purge_logs.sh > /dev/null 2>&1
>Known Issues
Must be run on a system 10g or earlier. We are going to be using ADRCI for 11g
Applies to:
Oracle Version: 10g and earlier. Information in this document applies to any platform.