一、环境描述: OS : Windows Server 2008 32Bit DB : Oracle 11.2.0 二、排错过程: 前天应用不能访问Oracle数据库了 (后台应用能访问数据库),故障发生。 马上登录到服务器里查看监听状态,发现有
一、环境描述:
OS : Windows Server 2008 32BitDB : Oracle 11.2.0
二、排错过程:
前天应用不能访问Oracle数据库了 (后台应用能访问数据库),故障发生。马上登录到服务器里查看监听状态,发现有TNS-12541 ,TNS-12560等错误
手动把监听服务启动,这时候服务状态上显示为已启动,但在CMD窗口执行lsnrctl status的时候依然返回错误信息:
C:>lsnrctl status
LSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 13-2月 -2018 10:39:47
Copyright (c) 1991, 2010, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=john-PC)(PORT=TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序 32-bit Windows Error: 61: Unknown error正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
过段时间回显非常慢。
三、解决方案步骤
**网上有个解决TNS-12535错误的案例,平台和版本都很类似,如下:
1、在 sqlnet.ora文件中 增加如下行:
DIAG_ADR_ENABLED = OFF
2、在listener.ora文件中增加如下行:
DIAG_ADR_ENABLED_<listenername> = OFF如果监听是listener时,则前面的名称为:DIAG_ADR_ENABLED_LISTENER = OFF
3、重新启动windows服务管理中的监听程序.先停止,然后再重新启动.
4、检查结果.发现可以了,返回的值在10毫秒.有时为0毫秒.成功!!
但这并不是问题发生原因,在继续排查过程中偶然发现监听日志大小居然为4G。
Oracle一个BUG,BUG号为9879101 : THE CONNECT THROUGH LISTENER WAS SLOW WHEN LISTNER LOG GROWED 4GB。
有MOS上一篇文章,ID 1319797.1 : WINDOWS: Listener Hangs & Lsnrctl Commands Are Slow or Hang,里面给出了解决方法:
You can solve this problem by deleting the large listener in $ORACLE_BASEdiagtnslsnr<hostname>listenertrace<listener_name>.log1) 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_BASEdiagtnslsnr<hostname>listenertrace<listener_name>.log3) Issue any lsnrctl command and you will see a new listener.log in its place under:$ORACLE_BASEdiagtnslsnr<hostname>listenertrace
Since ADR Diagnostics are enabled for this listener these steps cannot be done dynamically using the lsnrctl utility. e.g.LSNRCTL>set log_file mylogWill 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 OFFLSNRCTL>save_config
5、按照以上说明如下进行:
1)LSNRCTL进入交互模式2)set log_file mylog3)执行set current_listener LISTENER4)set log_status off5)save_config6)stop 停止监听器7)手工删除ADR指定的监听日志路径下的listener.log文件8)start重启监听器9)status查看状态
到此问题解决。