Oracle的监听日志listener.log当增长到一定大小时,会造成后续的日志无法写入,但不会报任何错误。
有时listener.log增长到4G,新的日志便无法写入,但有些时候listener.log增长到10G以上,仍然能正常写入。
直接删除或使用echo清理监听日志,会造成日志无法被写入的情况。正确的清理方法如下
offline listener清理
su - grid/oracle
[oracle@dg01 scripts]\$ lsnrctl status
...
Listener Log File /u01/app/oracle/diag/tnslsnr/dg01/listener/alert/log.xml
...
--切换到对应目录.../listener/trace/
[oracle@dg01 scripts]\$ cd /u01/app/oracle/diag/tnslsnr/dg01/listener/trace/
[oracle@dg01 trace]\$ ls -ltrh listener.log
-rw-r----- 1 oracle oinstall 16G 9月 12 14:51 listener.log
--停止监听日志写入
lsnrctl set log_status off
--备份监听日志【如果不需要备份可忽略此步骤】
tail -1000000 listener.log >>listener.logyyyymmdd
--tar -zcvf listeneryyyymmdd.tar.gz listener.log
--清空监听日志
echo "" > listener.log
--开启监听日志写入
lsnrctl set log_status on
online listener清理
这种清理可以理解为在不影响业务的情况下清理log,区别在于是否禁止listener进程持续写日志上,关闭listener写日志命令如下
lsnrctl set current_listener
lsnrctl set log_status off
--之后备分listener.log,清除log后恢复listener进程的日志记录。
--linux/unix
--备份
--备份最近的
tail -1000000 listener.log >>listener.logyyyymmdd
--有必要的话全部打包
或者 tar -zcvf listeneryyyymmdd.tar.gz listener.log
--清空文件
cp /dev/null listener.log
--Windows
@echo.> listener.log
或者
rename file方式清理
--开启监听日志写入
lsnrctl set log_status on