阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

92次阅读
没有评论

共计 2005 个字符,预计需要花费 6 分钟才能阅读完成。

一、环境描述:

OS : Windows Server 2008 32Bit
DB : 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

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

2、在 listener.ora 文件中增加如下行:

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

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

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

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 查看状态

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

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

到此问题解决。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2005字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中