Oracle监听连接速度很慢且不稳定问题排查与解决

现象:

本机数据库启动和关闭正常

sqlplus / as sysdba

startup

shutdown immediate

Oracle监听启动时需要几分钟并且大概率启动失败(监听服务启动也很慢)

lsnrctl start

查询监听状态也需要几分钟才能出结果

lsnrctl status

应用程序或Oracle客户端(PL/SQL等)连接时好时坏,并且连接很慢(连接上之后正常使用),但很容易导致应用程序数据库连接池阻塞

问题原因:

大概率原因是Oracle监听日志过大导致的,这个问题很容易被忽略,因为Oracle监听日志有两部分,分别位于\diag\tnslsnr\DBServer\listener\alert(警告日志)\diag\tnslsnr\DBServer\listener\trace(跟踪日志),警告日志是多个.xml文件,且单文件最大默认是10M,而跟踪日志是一个listener.log文件,这个文件的上限是4Gb,超过4Gb将严重影响数据库连接速度,从而导致本文现象出现。而一般让这个文件达到4Gb,业务量一般的情况下可能需要两三年,所以很容易被忽略监控。

解决办法:

将listener.log文件删除或清空即可。(不停监听服务这个文件无法直接删除或修改,提示被占用)

解决步骤:

在cmd中进入监听管理

lsnrctl

关闭监听日志

set log_status off

停止Oracle监听服务

stop

直接删除D:\Oracle\diag\tnslsnr\DBServer\listener\trace\listener.log文件或者新开一个cmd窗口,使用命令清空该文件

cls > D:\Oracle\diag\tnslsnr\DBServer\listener\trace\listener.log

返回监听管理的cmd窗口,重新开启监听服务(此时发现监听启动应该很快了)

start

打开监听日志

set log_status on

至此问题解决。

比较偏门的问题,今天遇到了刚好解决,顺手记录一下,希望对你有所帮助!

你可能感兴趣的:(数据库,oracle,数据库)