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

1、环境描述:

OS : Windows Server 2008 32Bit
DB : 11.2.0sql

2、排错过程:

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

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

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)))

过段时间回显很是慢。

3、解决方案步骤

**网上有个解决TNS-12535错误的案例,平台和版本都很相似,以下:服务器

一、在 sqlnet.ora文件中 增长以下行:

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

二、在listener.ora文件中增长以下行:

DIAG_ADR_ENABLED_<listenername> = OFF
若是监听是listener时,则前面的名称为:DIAG_ADR_ENABLED_LISTENER = OFF

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

三、从新启动windows服务管理中的监听程序.先中止,而后再从新启动.

四、检查结果.发现能够了,返回的值在10毫秒.有时为0毫秒.成功!!

但这并非问题发生缘由,在继续排查过程当中偶然发现监听日志大小竟然为4G。ide

Oracle一个BUG,BUG号为9879101 : THE CONNECT THROUGH LISTENER WAS SLOW WHEN LISTNER LOG GROWED 4GB。this

有MOS上一篇文章,ID 1319797.1 : WINDOWS: Listener Hangs & Lsnrctl Commands Are Slow or Hang,里面给出了解决方法:3d

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)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查看状态
TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误
TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误日志

到此问题解决。code

相关文章
相关标签/搜索