# oracle监听日志listener.log过大处理方法补充linux&windows脚本 ## 一、问题描述 当Oracle监听日志过大时,查看监听监听状态报错并非常缓慢。业务无法连接到数据库,登陆数据库服务器,查看监听已经断掉,尝试重启监听,重启失败;查看监听日志`listener.log`的大小已经超过9G以上。 在oracle中,如果不对监听日志文件进行截断(定期清理),那么监听日志文件会变得越来越大,由于一些老旧的OS不支持2GB以上的文件,故当`listener.log`文件超过2GB时,会出现无法处理新的连接,新的操作系统虽然不会出现这个问题,但我们依然需要对其进行定期清理。 ## 二、解决方法 清除日志文件内容(不可删除文件再创建新文件)。 ### 1、linux操作步骤: 步骤1:停止监听服务进程(tnslsnr)记录日志 ``` $ lsnrctl set log_status off; ``` 步骤2:拷贝listener.log文件 ``` $ cp listener.log listener.log.bak ``` 步骤3:清空listener.log文件内容 ``` $ echo '' > listener.log ``` 步骤4:查看日志文件大小,确认是否被清空 ``` $ du -sk * ``` 步骤5:开启监听服务进程(tnslsnr)日志 ``` $ lsnrctl set log_status on; ``` 步骤6:查看监听日志是否正常运行,如果不断更新,说明没问题(假如没人连接数据库,我们是看不到变化的,此时我们可以使用sqlplus连接数据库,看listener.log是否会更新 ``` $ tail -f listener.log ``` ### 1.2、Linux脚本 > 测试可用,配合crontab使用。不过测试发现超过4g也没啥影响??? 复制保存`delOracleListenerLog.sh`添加对应的计划任务 ```bash #!/bin/bash # 设置日志家目录 loghome="/oracle/app/oracle/diag/tnslsnr/youyongdb" # 输出日志家目录 echo $loghome # 尝试关闭监听器的日志记录(注意:这取决于lsnrctl的可用性和具体语法) lsnrctl set log_status off # 等待一小段时间,这里使用sleep来模拟 sleep 3 # 清空listener.log文件(在Linux中,我们不会尝试将输出重定向到该文件作为清空它的方式,而是直接清空文件) # 假设listener.log位于trace目录下 logfile="$loghome/listener/trace/listener.log" > "$logfile" # 这将清空文件内容 # 再次等待一小段时间 sleep 3 # 尝试开启监听器的日志记录 lsnrctl set log_status on # 再次等待一小段时间 sleep 3 # 输出成功消息 echo "Successfully cleared listener.log" ``` ### 2、windows操作步骤 步骤1:运行cmd,停止监听服务进程(tnslsnr)记录日志 命令:`lsnrctl set log_status off`  步骤2:切换到监听日志文件位置,并打开cmd,清空文件 命令:`cls >listener.log` dir命令可以查看当前文件夹下的内容并显示其详细信息  步骤3:开启监听服务进程(tnslsnr)日志 命令:`lsnrctl set log_status on`  ### 2.2、windows 脚本 > 测试可用,配合任务计划程序使用 复制保存`delOracleListenerLog.bat`添加对应的计划任务 ```bash @echo off REM 设置loghome环境变量为监听器日志的目录 set loghome="d:\app\administrator\diag\tnslsnr\WIN-youyong" REM 输出loghome环境变量的值 echo %loghome% REM 使用lsnrctl命令关闭监听器的日志记录 lsnrctl set log_status off REM 发送一个ping到本地地址以等待一段时间(无输出) ping 127.0.0.1 >nul REM 清空listener.log文件 echo. > "%loghome%\listener\trace\listener.log" REM 再次发送一个ping到本地地址以等待一段时间(无输出) ping 127.0.0.1 >nul REM 使用lsnrctl命令重新开启监听器的日志记录 lsnrctl set log_status on REM 再次发送一个ping到本地地址以等待一段时间(无输出) ping 127.0.0.1 >nul REM 输出成功消息 echo "Successfully deleted listener.rog" ``` ## 快照 - https://pic.rmb.bdstatic.com/bjh/240924/67a346c435bfee9b7131c51f199e14b87082.png - https://i3.wp.com/pic.rmb.bdstatic.com/bjh/240924/67a346c435bfee9b7131c51f199e14b87082.png