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 &

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