解决方案一:停止监听器
1)LSNRCTL进入交互模式 cmd 输入 LSNRCTL
2)执行set current_listener LISTENER
3)set log_status off
4)stop 停止监听器
5)手工删除ADR指定的监听日志路径下的listener.log文件
6)start重启监听器
7)status查看状态
@echo off
rem FileSize以KB为单位指定当日志文件达到多大时进行截断,默认是2GB
rem FileBakName指定备份的日志文件名,不能使用全路径!
rem FileBak备份日志的文件名,需指定全路径!
rem FileName需要截断的日志文件,需指定全路径!
set /a FileSize=2*1024*1024
set FileBakName="alter.log.bak"
set FileBak="D:\工作文档\temp\alter.log.bak"
set FileName="D:\工作文档\temp\alter.log"
if exist %FileName% (
for %%i in (%FileName%) do (
set /a CurrentSize=%%~zi/1024
if %CurrentSize% gtr %FileSize% (
if exist %FileBak% (
del %FileBak%
)
ren %FileName% %FileBakName%
)
)
)
很原始,只能监控一个日志文件,而且要手动设置几个参数,最后加入到计划任务里面就行了。
这个问题如果是在linux下可以用logrotate工具解决,logrotate是一个让日志文件自动按周期归档的工具,以避免日志文件过大。
Oracle 的listener.log 日志超过4G导致SQL速度极慢,监听命令能执行要10min。