Linux定时清理Oracle alert、trace、audit等日志文件
在Oracle 12cR2 RAC on linux上,通过crontab计划任务和清理脚本,定时清理Oracle rac相关的alert、trace、audit等日志文件。
目录
1.背景
已知生产环境有一套两节点Oracle 12cR2 RAC,长期运行后alert、trace、audit日志文件过多,占用大量磁盘,需要配置定时任务,自动清理过期日志文件。
这套Oracle 12cR2 RAC上有两个库(ods,edw)。以节点1为例,列出各种日志的路径,以及占用空间大小。可以看到由于长期没有清理,日志文件占用空间比较多,尤其监听日志。本文只关注alert日志(.xml)、trace日志(.trc及.trm)、审计日志(.aud)文件的清理,关于Oracle 12cR2 RAC监听日志的定时自动清理,请参考:定时清理Oracle 12c RAC listener监听日志。
/u01/app/oracle/admin/ods/adump -- 13G,*.aud文件
/u01/app/oracle/diag/rdbms/ods/ods1/alert -- 24G,*.xml文件
/u01/app/12.2.0/grid/rdbms/audit -- 22G,*.aud文件
/u01/app/grid/diag/tnslsnr --136G |
2.脚本文件
/root/adminShellScripts/purge_logs.sh
# Author: longfeiwlf
# Description: purge Oracle 12cR2 RAC alert,trace,audit logs
# Date: 2020-5-21
# Version: 2.0
#log file path in array
logdir[1]=/u01/app/oracle/admin/ods/adump
logdir[2]=/u01/app/oracle/admin/edw/adump
logdir[3]=/u01/app/oracle/diag/rdbms/ods/ods1/alert
logdir[4]=/u01/app/oracle/diag/rdbms/ods/ods1/trace
logdir[5]=/u01/app/oracle/diag/rdbms/edw/edw1/alert
logdir[6]=/u01/app/oracle/diag/rdbms/edw/edw1/trace
logdir[7]=/u01/app/oracle/diag/rdbms/ods/ods2/alert
logdir[8]=/u01/app/oracle/diag/rdbms/ods/ods2/trace
logdir[9]=/u01/app/oracle/diag/rdbms/edw/edw2/alert
logdir[10]=/u01/app/oracle/diag/rdbms/edw/edw2/trace
logdir[11]=/u01/app/12.2.0/grid/rdbms/audit
logdir[12]=/u01/app/grid/diag/tnslsnr/$HOSTNAME/asmnet1lsnr_asm/alert
logdir[13]=/u01/app/grid/diag/tnslsnr/$HOSTNAME/listener_scan1/alert
logdir[14]=/u01/app/grid/diag/tnslsnr/$HOSTNAME/listener/alert
logdir[15]=/u01/app/grid/admin/_mgmtdb/adump
today=$(date +%Y-%m-%d-%H:%M:%S)
echo "--------------------------------"
echo "$today"
echo "purge log files now..."
for i in {1..15}
do
echo "Now processing in ${logdir[$i]}"
if [ -d ${logdir[$i]} ]
then
#Linux find查找多个文件类型,有两种方法。
#1.使用 "-o -name", 其中"-o"表示"或", 多个-name要用圆括号"()"包起来,注意要用"\"转义,并且"\("和"\)"前后都要有空格
find ${logdir[$i]} -type f -mtime +180 \( -name "*.trc" -o -name "*.trm" -o -name "*.aud" -o -name "*.xml" \) | xargs -t -I {} rm -f {}
#2.使用-regex正则表达式,注意对".", "(", "|", ")" 进行转义
#find ${logdir[$i]} -type f -mtime +180 -regex '.*\.\(trm\|trc\|xml\|aud\)' | xargs -t -I {} rm -f {}
else
echo "The directory ${logdir[$i]} does NOT exist!"
fi
done
echo "Purge logs done."
3.添加crontab任务计划
在Oracle RAC各节点,root用户下,添加crontab任务计划,每天01:00执行一次。
00 01 * * * /root/adminShellScripts/purge_logs.sh >> /root/adminShellScripts/purge_logs.log 2>&1 &
更多推荐
所有评论(0)