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 &

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