问题描述
清理数据库监听日志的脚本
清理多个监听日志
清理文本和XML格式,自动判断
根据文本格式大小默认1GB
根据XML格式生成日期默认7天前
支持ORACLE用户同时安装DB 和GRID,listener in GRID HOME
机器名带域名
Tip: 在hpux 11.31 环境中shell 中的if -eq 比对数值大小时,如果数值大小超过Integer 类型的上限时使用的是String的ASCII码值比对,容易出现错误判断。
专家解答
#!/bin/sh # file: lsnr_log_clear.sh # author: weejar(anbob.com) # date: 2017/2/7 # desc: automatic to wrap listener log if filesize bigger than xx # version: 1.1 # note: to add crontab in listener owner # # I tested 11g, AIX 6, HPUX IA 11.31, EXADATA LINUX # update history # 0.1 2016/1/4 created # ... # 0.6 fix bug hpux 11.31 filesize over interger 2147483647 , do not work # 0.7 fix bug hpux listener two processes, exclude "-inherit" one # 0.8 fix bug hpux listener shadow processes get listener name wroung # 0.9 fix bug filesize float type compare issue, to integer # 1.0 fix LSNRRUNNING # 1.1 fix not remove listener xml log file in GRID HOME echo $0 echo `date "+%Y-%m-%d %H:%M:%S"` echo "To clear listener log file begin..." WorkDir="/tmp" listeners="${WorkDir}/listeners" lsnrcol5="${WorkDir}/lsnrcol5" # unit Mb FILESIZELIMIT=1024 # 0 not have xml, 1 have XMLFLAG=0 # set env if [[ -f ~/.profile ]] then . ~/.profile fi if [[ -f ~/.bash_profile ]] then . ~/.bash_profile fi if [[ ! -d $WorkDir ]] then mkdir -p $WorkDir fi OSV=`uname -s` echo "Current OS:${OSV}" LSNRRUNNING=`ps -ef | grep tnslsnr | grep -v grep` if [ -n "${LSNRRUNNING}" ] then # filter ppid is 1 ps -ef | grep tnslsnr | grep -v grep | awk '$3==1 {print $5}' > ${lsnrcol5} if [ $? -ne 0 ] then echo "ERROR: to create file ${lsnrcol5} faild!" exit 90 fi # Get listener names for i in `cat ${lsnrcol5}` do case "${i}" in "Jan"|"Feb"|"Mar"|"Apr"|"May"|"Jun"|"Jul"|"Aug"|"Sep"|"Oct"|"Nov"|"Dec") ps -ef | grep tnslsnr | grep -v grep | grep -v -i scan | awk '$3==1 {print $10}' > ${listeners} ;; *) ps -ef | grep tnslsnr | grep -v grep | grep -v -i scan | awk '{print $9}' > ${listeners} ;; esac done # Check user is listener owner if [ -s "${listeners}" ] then LSNROWNER=`ps -ef | grep tnslsnr | grep -v grep | grep -v -i scan|head -n 1|awk '{print $1}'` echo "listener owner: ${LSNROWNER}" USERID=`/usr/bin/id -u -nr` if [ $? -ne 0 ] then echo "ERROR: unable to determine uid" exit 99 fi echo "current user: ${USERID}" if [ "${USERID}" != "${LSNROWNER}" ] then echo "ERROR: This script must be run as listener owner: ${LSNROWNER}" exit 98 fi fi if [ -s "${listeners}" ] then for i in `cat ${listeners}|grep -v inherit` do echo " " echo "listener name: ${i}" # if lsnrctl ORACLE HOME NOT CURRENT, i.e. grid and oracle soft all use oracle user lsnrp=`ps -ef|grep tnslsnr|grep -v grep|grep "${i} "|head -n 1|awk '{ print $9 }'` if [[ "Linux" = "${OSV}" ]] then lsnrp=`ps -ef|grep tnslsnr|grep -v grep|grep "${i} "|awk '{ print $8 }'` fi if [[ "AIX" = "${OSV}" ]] then lsnrp=`ps -ef|grep tnslsnr|grep -v grep|grep "${i} "|head -n 1|awk '{ print $9 }'` fi if [[ "HP-UX" = "${OSV}" ]] then lsnrp=`ps -ef|grep tnslsnr|grep -v grep|grep "${i} "|awk '$3==1 {print $9 }'|head -n 1 ` fi echo "Listener Home path: ${lsnrp} $lsnrp" if [ -n "${lsnrp}" ] then ORACLE_HOME=${lsnrp%/bin*} fi echo "oracle home: $ORACLE_HOME" lsnrlog=`${ORACLE_HOME}/bin/lsnrctl status ${i} | grep "Listener Log" | awk '{print $4}'` if [ ! -f "${lsnrlog}" ] then echo "${lsnrlog} does not exist" exit 1 fi echo "listener log file: ${lsnrlog}" FILENAME=${lsnrlog##*/} echo "listener filename: ${FILENAME}" FILEEXT=${FILENAME#*.} echo "listener file ext: ${FILEEXT}" if [[ "log" = "${FILEEXT}" ]] then FILEPATH=`dirname ${lsnrlog}` echo "listener file path: ${FILEPATH}" FILESIZE=`ls -l ${lsnrlog}|awk '{ printf "%.0f", $5/1024/1024 }'` echo "listener file size(MB):${FILESIZE}" if [ ${FILESIZE} -gt ${FILESIZELIMIT} ];then echo "listener log is bigger than ${FILESIZELIMIT} MB" # cut listener log file ${ORACLE_HOME}/bin/lsnrctl <<EOF set cur listener ${i} set log_status off exit EOF echo "cd ${FILEPATH}" cd ${FILEPATH} echo "mv -f ${FILENAME} ${FILENAME}_old" mv -f ${FILENAME} ${FILENAME}_old ${ORACLE_HOME}/bin/lsnrctl <<EOF set cur listener ${i} set log_status on exit EOF echo "gzip -f ${FILENAME}_old" gzip -f ${FILENAME}_old else echo "listener log is litter than ${FILESIZELIMIT} MB" fi fi if [[ "xml" = "$FILEEXT" ]] then LOGTXT="`echo ${i}|tr 'A-Z' 'a-z'`.log" LOGTXTPATH=`dirname ${lsnrlog} |sed 's/alert$/trace/'` LOGTXTFILE="$LOGTXTPATH/$LOGTXT" echo "listener txt log file: ${LOGTXTFILE}" FILESIZE=`ls -l ${LOGTXTFILE}|awk '{ printf "%.0f", $5/1024/1024 }'` echo "listener file size(MB):${FILESIZE}" LOGXMLPATH=`dirname ${lsnrlog}` echo "listener xml log Home: ${LOGXMLPATH}" # curt txt file large than $FILESIZELIMIT if [ ${FILESIZE} -gt ${FILESIZELIMIT} ] then echo "listener log is bigger than ${FILESIZELIMIT} MB" # cut listener log file echo "mv -f ${LOGTXTFILE} ${LOGTXTFILE}_old " mv -f ${LOGTXTFILE} ${LOGTXTFILE}_old echo "cd ${LOGTXTPATH}" cd ${LOGTXTPATH} echo "gzip -f ${LOGTXT}_old" gzip -f ${LOGTXT}_old else echo "listener log is litter than ${FILESIZELIMIT} MB" fi # curt xml logfile longer than 7 days. echo "To remove listener file for xml format longer than 7 days..." cd $LOGXMLPATH find ./ -name "log*.xml" -mtime +7 -print -exec rm {} \; #set flag XMLFLAG=1 fi done ## if [ ${XMLFLAG} -gt 0 ] ## then ## # remove listener file for xml format longer than 7 days ## HOSTNAME=`hostname` ## shortname=${HOSTNAME%%.*} ## echo "To remove listener file for xml format longer than 7 days..." ## cd $ORACLE_BASE/diag/tnslsnr/${shortname} ## # print deleted ## find ./ -name "log*.xml" -mtime +7 -print -exec rm {} \; ## fi fi else printf "Unable to swap listener log files - Listener down\n" echo "${HOST} Unable to swap listener log files - Listener down" fi echo `date "+%Y-%m-%d %H:%M:%S"` echo "To clear listener log file complated!" echo "" echo ""复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
767次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
649次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
575次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
527次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
521次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
499次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
484次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
454次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
374次阅读
2025-05-05 19:28:36
TA的专栏
Java中间件
收录0篇内容
热门文章
一次Connection reset by peer的问题排查
2021-12-07 34248浏览
Java8-Stream: no instance(s) of type variable(s) R exist so that void conforms to R
2021-02-19 32447浏览
nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1
2022-02-15 24342浏览
ORA-00904: "POLTYP": invalid identifier
2019-06-19 12945浏览
PageHelper排坑,处理排序失败: net.sf.jsqlparser.JSQLParserException
2022-05-19 12854浏览