千家信息网

TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误

发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日,一、环境描述:OS : Windows Server 2008 32BitDB : 11.2.0二、排错过程:前天应用不能访问数据库了 (后台应用能访问数据库),故障发生。马上登录到服务器里查看监听状
千家信息网最后更新 2024年10月25日TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误

一、环境描述:

OS : Windows Server 2008 32Bit
DB : 11.2.0

二、排错过程:

前天应用不能访问数据库了 (后台应用能访问数据库),故障发生。
马上登录到服务器里查看监听状态,发现有TNS-12541 ,TNS-12560等错误

手动把监听服务启动,这时候服务状态上显示为已启动,但在CMD窗口执行lsnrctl status的时候依然返回错误信息:

C:\>lsnrctl statusLSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 13-2月 -2018 10:39:47Copyright (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_ = 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_BASE\diag\tnslsnr\\listener\trace\.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_BASE\diag\tnslsnr\\listener\trace\.log3)  Issue any lsnrctl command and you will see a new listener.log in its place under:$ORACLE_BASE\diag\tnslsnr\\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 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 LSNRCTL>set log_status OFFLSNRCTL>save_config

5、按照以上说明如下进行:

1)LSNRCTL进入交互模式
2)set log_file mylog
3)执行set current_listener LISTENER
4)set log_status off
5)save_config
6)stop 停止监听器
7)手工删除ADR指定的监听日志路径下的listener.log文件
8)start重启监听器
9)status查看状态

到此问题解决。

0