Oracle的diag文件可以删除,oracle11g rac diag/tnslsnr/pgis2/listener/alert 中的文件能删除吗...
滿意答案
yaoyangm
2016.08.03
采納率:47%????等級:12
已幫助:27962人
當(dāng)然要對監(jiān)聽日志文件(listener.log)進(jìn)行定期清理,如果不定期清理,會(huì)遇到下面一些麻煩:
1:監(jiān)聽日志文件(listener.log)變得越來越大,占用額外的存儲空間。(當(dāng)然現(xiàn)在存儲白菜價(jià),不差那幾G的空間。但是我們還是要本著工匠情懷,精益求精)
2:監(jiān)聽日志文件(listener.log)變得太大會(huì)帶來一些問題:LISTENER.LOG日志大小不能超過2GB,超過會(huì)導(dǎo)致LISTENER監(jiān)聽器無法處理新的連接。
3:監(jiān)聽日志文件(listener.log)變得太大,給寫入、查看帶來的一些性能問題、麻煩。
也有人說是監(jiān)聽服務(wù)進(jìn)程一般使用標(biāo)準(zhǔn)C函數(shù)Write寫出到Listener.log,listener.log文件時(shí)使用的是O_WRONLY|O_CREAT|O_APPEND,O_APPEND即追加到文件的尾端,一般來說追加寫方式不會(huì)因?yàn)槲募酱髮懙卦铰F查_這個(gè)不談,在一個(gè)很大的監(jiān)聽日志文件(listener.log)查找某一天或某一個(gè)錯(cuò)誤,這個(gè)確實(shí)會(huì)帶來一些性能問題。查找起來也相當(dāng)麻煩。
所以應(yīng)該定期對監(jiān)聽日志文件(listener.log)進(jìn)行清理,另外一種說法叫截?cái)嗳罩疚募jP(guān)于截?cái)啾O(jiān)聽日志,要注意一些問題。初學(xué)ORACLE的時(shí)候遇到一個(gè)錯(cuò)誤的截?cái)啾O(jiān)聽日志的,下面演示一下
[oracle@DB-Server log]$ mv listener.log listener.log.20150114
[oracle@DB-Server log]$ cp /dev/null listener.log
[oracle@DB-Server log]$ more listener.log
如上所示,這樣截?cái)啾O(jiān)聽日志(listener.log)后,監(jiān)聽服務(wù)進(jìn)程(tnslsnr)并不會(huì)將新的監(jiān)聽信息寫入listener.log,而是繼續(xù)寫入listener.log.20150114
[oracle@DB-Server log]$ tail listener.log.20150114
15-JAN-2015 22:40:01 * service_update * EPPS * 0
15-JAN-2015 22:47:59 * service_update * EPPS * 0
15-JAN-2015 22:58:00 * service_update * EPPS * 0
15-JAN-2015 23:08:00 * service_update * EPPS * 0
15-JAN-2015 23:18:01 * service_update * EPPS * 0
15-JAN-2015 23:28:01 * service_update * EPPS * 0
15-JAN-2015 23:38:02 * service_update * EPPS * 0
15-JAN-2015 23:41:02 * service_update * EPPS * 0
15-JAN-2015 23:50:26 * ping * 0
15-JAN-2015 23:51:03 * service_update * EPPS * 0
[oracle@DB-Server log]$ tail listener.log.20150114
15-JAN-2015 23:18:01 * service_update * EPPS * 0
15-JAN-2015 23:28:01 * service_update * EPPS * 0
15-JAN-2015 23:38:02 * service_update * EPPS * 0
15-JAN-2015 23:41:02 * service_update * EPPS * 0
15-JAN-2015 23:50:26 * ping * 0
15-JAN-2015 23:51:03 * service_update * EPPS * 0
15-JAN-2015 23:57:40 * ping * 0
15-JAN-2015 23:57:41 * ping * 0
15-JAN-2015 23:57:42 * ping * 0
15-JAN-2015 23:57:43 * ping * 0
[oracle@DB-Server log]$ more listener.log
[oracle@DB-Server log]$
規(guī)范正確的流程應(yīng)該這么處理:
Step 1:首先停止監(jiān)聽服務(wù)進(jìn)程(tnslsnr)記錄日志。
[oracle@DB-Server log]$ lsnrctl set log_status off;
LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 16-JAN-2015 00:02:59
Copyright (c) 1991, 2007, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.9.15)(PORT=1521)))
LISTENER parameter "log_status" set to OFF
The command completed successfully
Step 2:將監(jiān)聽日志文件(listener.log)復(fù)制一份,以listener.log.yyyymmdd格式命名
[oracle@DB-Server log]$ cp listener.log listener.log.20150114
Step 3:將監(jiān)聽日志文件(listener.log)清空。清空文件的方法有很多
3.1 echo “” > filename
3.2 cp /dev/null 或 echo /dev/null > filename
Step 4:開啟監(jiān)聽服務(wù)進(jìn)程(tnslsnr)記錄日志
[oracle@DB-Server log]$ lsnrctl set log_status on;
當(dāng)然也可以移走監(jiān)聽日志文件(listener.log),數(shù)據(jù)庫實(shí)例會(huì)自動(dòng)創(chuàng)建一個(gè)listener.log文件。
% lsnrctl set log_status off
% mv listener.log listener.yyyymmdd
% lsnrctl set log_status on
當(dāng)然這些操作應(yīng)該通過shell腳本來處理,然后結(jié)合crontab作業(yè)定期清理、截?cái)啾O(jiān)聽日志文件。例如網(wǎng)上的一個(gè)清理、截?cái)啾O(jiān)聽日志文件的shell腳本。
rq=` date +"%d" `
cp $ORACLE_HOME/network/log/listener.log $ORACLE_BACKUP/network/log/listener_$rq.log
su - oracle -c "lsnrctl set log_status off"
cp /dev/null $ORACLE_HOME/network/log/listener.log
su - oracle -c "lsnrctl set log_status on"
這樣的腳本還沒有解決一個(gè)問題,就是截?cái)嗟谋O(jiān)聽日志文件保留多久的問題。比如我只想保留這些截?cái)嗟谋O(jiān)聽日志一個(gè)月時(shí)間,我希望作業(yè)自動(dòng)維護(hù)。不需要我去手工操作。有這樣一個(gè)腳本cls_oracle.sh可以完全做到這個(gè),當(dāng)然它還會(huì)歸檔、清理其它日志文件,例如告警文件(alert_sid.log)等等。功能非常強(qiáng)大。
#!/bin/bash
#
# Script used to cleanup any Oracle environment.
#
# Cleans: audit_log_dest
# background_dump_dest
# core_dump_dest
# user_dump_dest
#
# Rotates: Alert Logs
# Listener Logs
#
# Scheduling: 00 00 * * * /home/oracle/_cron/cls_oracle/cls_oracle.sh -d 31 > /home/oracle/_cron/cls_oracle/cls_oracle.log 2>
&1
#
# Created By: Tommy Wang 2012-09-10
#
# History:
#
RM="rm -f"
RMDIR="rm -rf"
LS="ls -l"
MV="mv"
TOUCH="touch"
TESTTOUCH="echo touch"
TESTMV="echo mv"
TESTRM=$LS
TESTRMDIR=$LS
SUCCESS=0
FAILURE=1
TEST=0
HOSTNAME=`hostname`
ORAENV="oraenv"
TODAY=`date +%Y%m%d`
ORIGPATH=/usr/local/bin:$PATH
ORIGLD=$LD_LIBRARY_PATH
export PATH=$ORIGPATH
# Usage function.
f_usage(){
echo "Usage: `basename $0` -d DAYS [-a DAYS] [-b DAYS] [-c DAYS] [-n DAYS] [-r DAYS] [-u DAYS] [-t] [-h]"
echo " -d = Mandatory default number of days to keep log files that are not explicitly passed as parameters."
echo " -a = Optional number of days to keep audit logs."
echo " -b = Optional number of days to keep background dumps."
echo " -c = Optional number of days to keep core dumps."
echo " -n = Optional number of days to keep network log files."
echo " -r = Optional number of days to keep clusterware log files."
echo " -u = Optional number of days to keep user dumps."
echo " -h = Optional help mode."
echo " -t = Optional test mode. Does not delete any files."
}
if [ $# -lt 1 ]; then
f_usage
exit $FAILURE
fi
# Function used to check the validity of days.
f_checkdays(){
if [ $1 -lt 1 ]; then
echo "ERROR: Number of days is invalid."
exit $FAILURE
fi
if [ $? -ne 0 ]; then
echo "ERROR: Number of days is invalid."
exit $FAILURE
fi
}
# Function used to cut log files.
f_cutlog(){
# Set name of log file.
LOG_FILE=$1
CUT_FILE=${LOG_FILE}.${TODAY}
FILESIZE=`ls -l $LOG_FILE | awk '{print $5}'`
# Cut the log file if it has not been cut today.
if [ -f $CUT_FILE ]; then
echo "Log Already Cut Today: $CUT_FILE"
elif [ ! -f $LOG_FILE ]; then
echo "Log File Does Not Exist: $LOG_FILE"
elif [ $FILESIZE -eq 0 ]; then
echo "Log File Has Zero Size: $LOG_FILE"
else
# Cut file.
echo "Cutting Log File: $LOG_FILE"
$MV $LOG_FILE $CUT_FILE
$TOUCH $LOG_FILE
fi
}
# Function used to delete log files.
f_deletelog(){
# Set name of log file.
CLEAN_LOG=$1
# Set time limit and confirm it is valid.
CLEAN_DAYS=$2
f_checkdays $CLEAN_DAYS
# Delete old log files if they exist.
find $CLEAN_LOG.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] -type f -mtime +$CLEAN_DAYS -exec $RM {} \; 2>/dev/null
}
# Function used to get database parameter values.
f_getparameter(){
if [ -z "$1" ]; then
return
fi
PARAMETER=$1
sqlplus -s /nolog <
set head off pagesize 0 feedback off linesize 200
whenever sqlerror exit 1
conn / as sysdba
select 'a='||value from v\$parameter where name = '$PARAMETER';
EOF
}
# Function to get unique list of directories.
f_getuniq(){
if [ -z "$1" ]; then
return
fi
ARRCNT=0
MATCH=N
x=0
for e in `echo $1`; do
if [ ${#ARRAY[*]} -gt 0 ]; then
# See if the array element is a duplicate.
while [ $x -lt ${#ARRAY[*]} ]; do
if [ "$e" = "${ARRAY[$x]}" ]; then
MATCH=Y
fi
done
fi
if [ "$MATCH" = "N" ]; then
ARRAY[$ARRCNT]=$e
ARRCNT=`expr $ARRCNT+1`
fi
x=`expr $x + 1`
done
echo ${ARRAY[*]}
}
# Parse the command line options.
while getopts a:b:c:d:n:r:u:th OPT; do
case $OPT in
a) ADAYS=$OPTARG
;;
b) BDAYS=$OPTARG
;;
c) CDAYS=$OPTARG
;;
d) DDAYS=$OPTARG
;;
n) NDAYS=$OPTARG
;;
r) RDAYS=$OPTARG
;;
u) UDAYS=$OPTARG
;;
t) TEST=1
;;
00分享舉報(bào)
總結(jié)
以上是生活随笔為你收集整理的Oracle的diag文件可以删除,oracle11g rac diag/tnslsnr/pgis2/listener/alert 中的文件能删除吗...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打CALL APP 项目进展 总体计划
- 下一篇: django 模板继承与重写