目錄
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: [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 &