201909 Oracle可以sqlplus,但无法plsql 之监听慢(日志满)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Partner2016/article/details/88366272

如201903文所述,我们的一台下发库周五还可以plsql连接的,周一来就只可以通过服务器命令行的sqlplus方式连接上,但是,通过plsql就没法连接上。
监听删除,重建
监听服务关闭、启动
数据库关闭、启动
服务器关闭、启动
都没能解决问题。
到底发生了什么呢?

我们自己折腾了一天都没能解决。
工程师断定是系统问题。
我们就以为无解了。

后来,幸亏又请了另一位工程师到现场,他一看,发现监听程序缓慢,就立马定位了问题:
listner.log日志文件达到4G了。
在这里插入图片描述

这一刻,深刻地领悟到,所有的问题,都需要查日志啊!!!

但后来想想,即便我当时查看了日志,也不能意识到是因为日志满了没法往里写的原因吧。
但需要说明的是,

查日志是非常有必要的也是非常高效的解决问题的方法!

说这是Oracle数据库在Windows操作系统中的bug。
BUG号为9879101
在这里插入图片描述

参考文档如下:
ID 1319797.1 :
WINDOWS: Listener Hangs & Lsnrctl Commands Are Slow or Hang

You can solve this problem by deleting the large listener in
$ORACLE_BASE\diag\tnslsnr<hostname>\listener\trace<listener_name>.log

  1. Stop the listener process using the command line or Control Panel Service.
  2. Delete the log file(s) that are at or approaching the 4G size limit at this location:
    $ORACLE_BASE\diag\tnslsnr<hostname>\listener\trace<listener_name>.log
  3. Issue any lsnrctl command and you will see a new listener.log in its place under:
    $ORACLE_BASE\diag\tnslsnr<hostname>\listener\trace
    Since ADR Diagnostics are enabled for this listener these steps cannot be done
    dynamically using the lsnrctl utility.

e.g.
LSNRCTL>set log_file mylog
Will yield: TNS-01251: Cannot set trace/log directory under ADR.
However,it is possible to disable the flat file listener logging using the following
commands:
LSNRCTL>set current_listener <listener_name>
LSNRCTL>set log_status OFF
LSNRCTL>save_config

当时工程师的做法是:

  1. 关闭监听 lsrnctl stop
  2. 删监听日志文件
  3. 删除监听、重建监听
  4. Cmd中,lsrntrl
    Lsnctl> set logfile new_logfile
    Lsnctl> set current_listener listener(新监听的名字)
    Lsnctl> set log_status OFF
    Lsnctl> save_config
  5. 然后在服务里,重启了下监听服务
  6. 连接就成功了。

在4中, 工程师用 set log_status OFF把监听日志关闭了
这样从根本上断绝了该问题再次发生的可能。
但从另一方面讲,有日志才有源可溯,所以,可以在
Lsnctl> set log_status ON
等下次再出现这个问题,再重复上述操作就是喽~

猜你喜欢

转载自blog.csdn.net/Partner2016/article/details/88366272