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

来源:互联网 发布:实用五金工具手册软件 编辑:程序博客网 时间:2024/05/17 05:11

最近接了个公司的锅,2012年的老项目要改需求。用的struts2开发的,数据库用的oracle。瞬间感觉好苦逼。。。。没办法,锅已经背上了,要好好搞啊~~~

进去数据库服务器,用PL/SQL连接,发现连接不上。。。。。说是12541: TNS: 无监听程序。检查了一下oracle的服务,该开的都开了,然并卵。。

上网查了下问题,有的说是什么host改成本地主机名的或者localhost的或者替换oci.dll文件的 统统无用。(悲催ing)最后想在NET manager里面重新配置一下服务,发现配置的时候卡的一比,,最后搞了半天,终于搞出来了。。现在把问题解决方式奉献如下:

首先在CMD窗口执行lsnrctl status,发现错误原因如下:

TNS-12541: TNS: 无监听程序

TNS-12560: TNS: 协议适配器错误

TNS-00511: 无监听程序 


网上有个解决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。

那么如何解决呢??网上搜的答案如下。。。

You can solve this problem by deleting the large listener in $ORACLE_BASE\diag\tnslsnr\<hostname>\listener\trace\<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_BASE\diag\tnslsnr\<hostname>\listener\trace\<listener_name>.log3)  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 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

大概意思就是:

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

就是那个4G的log在作怪路径:$ORACLE_BASE\diag\tnslsnr\<hostname>\listener\trace\<listener_name>.log  

至此,问题得到完美解决。希望能帮到你。