Linux定時清理Oracle 12c RAC listener監聽日誌

目錄

1.背景

1.1Oracle 12cR2 RAC監聽有哪些

1.2Oracle 12cR2 RAC監聽日誌文件有哪些

2.腳本文件

3.添加crontab任務計劃


1.背景

已知生產環境有一套兩節點Oracle 12cR2 RAC,長期運行後監聽日誌文件過多,佔用大量磁盤,需要配置定時任務,自動截斷、備份、清理監聽日誌。

1.1Oracle 12cR2 RAC監聽有哪些

在兩個節點上,查看監聽進程:ps -ef | grep tnslsnr| grep -v grep。

可以看到兩個節點上都有"LISTENER"本地監聽、"ASMNET1LSNR_ASM"監聽(Cluster ASM listener),節點1上還有"LISTENER_SCAN1"(SCAN監聽),節點2上還有"MGMTLSNR"(管理資料庫監聽)。

[grid@ora12cnode1 ~]$ ps -ef | grep tnslsnr| grep -v grep
grid     21591     1  0  2018 ?        1-03:15:00 /u01/app/12.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -no_crs_notify -inherit
grid     50594     1  0  2018 ?        05:51:15 /u01/app/12.2.0/grid/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit
grid     50732     1  0  2018 ?        2-00:02:26 /u01/app/12.2.0/grid/bin/tnslsnr LISTENER -no_crs_notify -inherit
[grid@ora12cnode2 ~]$ ps -ef | grep tnslsnr| grep -v grep
grid     41881     1  0  2018 ?        05:48:36 /u01/app/12.2.0/grid/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit
grid     42662     1  0  2018 ?        17:12:22 /u01/app/12.2.0/grid/bin/tnslsnr LISTENER -no_crs_notify -inherit
grid     42689     1  0  2018 ?        00:25:35 /u01/app/12.2.0/grid/bin/tnslsnr MGMTLSNR -no_crs_notify -inherit

1.2Oracle 12cR2 RAC監聽日誌文件有哪些

  • 監聽alert日誌文件:$ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener_name/alert目錄下的*.xml文件
  • 監聽trace日誌文件:$ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener_name/trace目錄下的listener_name.log

本文重點是對監聽trace文件listener_name.log進行截斷、備份、清理。關於監聽alert日誌文件.xml,請參考:Linux定時清理Oracle alert、trace、audit等日誌文件

2.腳本文件

/home/grid/adminShellScripts/purge_listener_logs.sh

#!/bin/bash

# Author: longfeiwlf
# Description: purge Oracle 12c RAC running listeners' trace log file
# Date: 2020-5-21
# Version: 1.1

#source user grid's environment
source /home/grid/.bash_profile

today=$(date +%Y%-m-%d-%H:%M:%S)
echo "========================================$today========================================="
#查找所有正在運行的監聽
listeners=$(ps -ef| grep tnslsnr | grep -v grep | awk '{print $9}')
echo "Listeners running on this host: $listeners"

#set log_status to "OFF" or "ON"
#"lsnrctl<<-EOF"連起來寫,中間沒有任何空格。開始的EOF前加上減號"-",就可以在結束的EOF前使用tab(注意不是空格)來縮進
function set_log_status(){
    echo ""
    echo "--------------------------set $1 log_status $2-----------------"
    lsnrctl<<-EOF
    set current_listener $1
    show log_status
    set log_status $2
    show log_status
	EOF
    echo ""
}

#backup listener trace log and purge log files 180 days ago
function purge_log(){
    echo "--------------------------purge $1-----------------------------"
    time_now=$(date +%Y%m%d%H%M%S)
    lsnr_trace_dir=$ORACLE_BASE/diag/tnslsnr/$HOSTNAME/${1,,}/trace
    cd ${lsnr_trace_dir}
    cp ${1,,}.log ${1,,}.log.${time_now}
    cat /dev/null > ${1,,}.log
    ls -lrth
    find ${lsnr_trace_dir} -type f -mtime +180 -name "*.log.*"| xargs -t -I {} rm -f {}
}

#purge all running listener's logs
for lsnr in $listeners
do
    echo "Purge listener $lsnr trace log now..."
    set_log_status $lsnr "off" 
    purge_log $lsnr
    set_log_status $lsnr "on" 
done
echo "Purge listener trace logs done."

3.添加crontab任務計劃

在Oracle RAC節點1、節點2的grid用戶下,添加crontab任務計劃,每月1日02:00執行。

00 02 1 * * /home/grid/adminShellScripts/purge_listener_logs.sh >>/home/grid/adminShellScripts/purge_listener_logs.log 2>&1 &

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