Linux定时清理Oracle alert、trace、audit等日志文件

目录

1.背景

2.脚本文件

3.添加crontab任务计划


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监听日志

本环境下Oracle 12cR2 RAC alert trace audit日志文件路径及占用空间大小

/u01/app/oracle/admin/ods/adump   -- 13G,*.aud文件
/u01/app/oracle/admin/edw/adump   -- 6.9G,*.aud文件

 

/u01/app/oracle/diag/rdbms/ods/ods1/alert   -- 24G,*.xml文件
/u01/app/oracle/diag/rdbms/ods/ods1/trace   -- 15G,*.trc *.trm文件
/u01/app/oracle/diag/rdbms/edw/edw1/alert   -- 14M,*.xml文件
/u01/app/oracle/diag/rdbms/edw/edw1/trace   -- 7.7G,*.trc *.trm文件

 

/u01/app/12.2.0/grid/rdbms/audit  -- 22G,*.aud文件

 

/u01/app/grid/diag/tnslsnr --136G
/u01/app/grid/diag/tnslsnr/bigdatadb1/asmnet1lsnr_asm/alert  11G,*.xml文件
/u01/app/grid/diag/tnslsnr/bigdatadb1/asmnet1lsnr_asm/trace  5.8G, listener*.log文件
/u01/app/grid/diag/tnslsnr/listener_scan1/alert  42G,*.xml文件
/u01/app/grid/diag/tnslsnr/listener_scan1/trace  23G, listener*.log文件
/u01/app/grid/diag/tnslsnr/listener/alert  24G,*.xml文件
/u01/app/grid/diag/tnslsnr/listener/trace  32G, listener*.log文件
/u01/app/grid/diag/tnslsnr/bigdatadb1/mgmtlsnr/alert 461M,*.xml文件
/u01/app/grid/diag/tnslsnr/bigdatadb1/mgmtlsnr/trace 150M, listener*.log文件

2.脚本文件

/root/adminShellScripts/purge_logs.sh

# Author: [email protected]
# 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 &

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章