oracle 11g的监听日志和警告日志都是在/opt/oracle/app/diag/tnslsnr/机器名/listener目录
在高坪等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、网站建设 网站设计制作按需网站建设,公司网站建设,企业网站建设,成都品牌网站建设,营销型网站,成都外贸网站建设,高坪网站建设费用合理。
其中警告日志在alert目录下,监听日志在trace目录下。listener目录下产生的日志文件比较大,是主要清理的对象。在listener目录下监听日志是一个名为listener.log的文件,而警告日志log.xml,这个日志每到11M左右就会分割成一个log_XXXX.xml的日志,逐渐累加。
是否不需要对监听日志文件进行截断维护呢? 答案是否定的。当然要对监听日志文件(listener.log)进行定期清理,如果不定期清理,会遇到下面一些麻烦:
1、监听日志文件(listener.log)变得越来越大,占用额外的存储空间。(当然现在存储白菜价,不差那几G的空间。但是我们还是要本着工匠情怀,精益求精)。
2、监听日志文件(listener.log)变得太大会带来一些问题:LISTENER.LOG日志大小不能超过2GB,超过会导致LISTENER监听器无法处理新的连接。
3、监听日志文件(listener.log)变得太大,给写入、查看带来的一些性能问题、麻烦。
一、单机实例:
$ find $ORACLE_BASE -name listener.log
/opt/oracle/app/diag/tnslsnr/testdb/listener/trace/listener.log
LSNRCTL> show
The following operations are available after show
An asterisk (*) denotes a modifier or extended command:
rawmode displaymode
rules trc_file
trc_directory trc_level
log_file log_directory
log_status current_listener
inbound_connect_timeout startup_waittime
snmp_visible save_config_on_stop
dynamic_registration enable_global_dynamic_endpoint
oracle_home pid
LSNRCTL> show log_file
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
LISTENER parameter "log_file" set to /opt/oracle/app/diag/tnslsnr/testdb/listener/alert/log.xml
The command completed successfully
show log_status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
LISTENER parameter "log_status" set to ON
The command completed successfully
show log_directory
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
LISTENER parameter "log_directory" set to /opt/oracle/app/diag/tnslsnr/testdb/listener/alert
The command completed successfully
监听目前处于正常状态,日志功能也打开,后来一想,原来是日志文件大小已满
处理:
1:首先 停止日志
LSNRCTL> set log_status off
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
LISTENER parameter "log_status" set to OFF
The command completed successfully
LSNRCTL> exit
2、到目录/opt/oracle/app/diag/tnslsnr/wskjdb/listener/trace
mv listener.log listener.log.bak
3、开启日志
LSNRCTL> set log_status on
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
LISTENER parameter "log_status" set to ON
The command completed successfully
4、重新加载监听器
LSNRCTL> reload
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
The command completed successfully
LSNRCTL> exit
LSNRCTL> show log_status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxxx)(PORT=1521)))
LISTENER parameter "log_status" set to ON
The command completed successfully
5、目录下重新生成新的日志,压缩保存$tar czvf listener.log.bak.gz listener.log.bak
6、删除原有的日志:rm -rf listener.log.bak
二、在RAC环境中,需要切换到grid用户来查询监听日志
#su - grid
lsnrctl命令行模式
set current_listener listener_scan1
set log_status off
cat /dev/null > listener_scan1.log
set log_status on
cat listener_scan1.log
三、通过使用crontab来定时清理:
使用定时器来清理监听日志文件其实和上面操作类似,脚本如下:
$listener_log.sh
#!/bin/bash
data_name=`date +'%d%m'`
cd /opt/oracle/app/diag/tnslsnr/wskjdb/listener/trace
lsnrctl set log_status off
mv listener.log /tmp/listener.log.$data_name
lsnrctl set log_status on
lsnrctl reload
制定crontab任务:0 1 * * * /home/oracle/listener_log.sh > /home/oracle/listener_log.log 2>&1
执行时间和保留策略都是可以自己制定的,通过crontab可以摆脱手工操作,通过系统自动去执行维护操作。