文档章节

关于“ORA-12518: TNS: 监听程序无法分发客户机连接”的一种解决方法

rootliu
 rootliu
发布于 2017/08/18 09:25
字数 1075
阅读 10
收藏 0

问题场景:昌平的服务器修改了静态ip,并重启了几次机器,后来在实验室通过远程桌面访问oracle数据库,发现sql developer无法连接数据库,报错“TNS:监听程序无法分发客户机连接”。之后进入windows server 2008服务器的服务,查看oracle的服务除了实例没有启动外,其他都正常,试图启动OracleService***实例后报错“错误1053:服务并未及时响应启动或控制请求”。试图用sqlplus开启数据库,却发现无法登陆,报错“协议适配器不匹配”,在Oracle Net Manager中测试服务仍然报错“TNS:监听程序无法分发客户机连接”。

考虑可能引起问题的地方有几点:1.服务器修改ip后导致监听失效。2.服务器实例无法启动导致报错。3.上述报错内容涉及到的细节问题。

解决方法:

1.查看listen.ora和tnsnames.ora文件内容(%ORACLE_HOME%/NETWORK/ADMIN目录下):

修改ip可能会引起监听出现问题,查看并修改这两个文件中涉及到的HOST内容,是否为主机名或正确ip地址。

2.查看“ORA-12518:TNS:监听程序无法分发客户机连接”(“ORA-12518:TNS listener could not hand off client connection”)错误原因:

产生这个错误的原因有很多,大多数问题来自于内存不够用。检查%ORACLE_BASE%/diag/tnslsnr/主机名/listener/alert 文件中的log日志,查看错误原因是什么(查看之前最好重现下错误,然后再查会比较方便)。例如我的问题是:

TNS-12518: TNS:listener could not hand off client connection

TNS-12560: TNS:protocol adapter error
   TNS-00530: Protocol adapter error
    32-bit Windows Error: 233: Unknown error

根据错误原因,查看这篇日志:http://blog.sina.com.cn/s/blog_53a1165e0100nisv.html 里面把错误原因在linux和windows出现的情况分别进行了列举,虽然是英文的吧,但是错误原因覆盖的很广,大家可以根据自己的问题出在哪儿来进行有针对的修改。12518这个错误产生的原因很多,网上搜到的一般只是针对特定问题的解决,可能没有那个全面。如果你查到是因为自己内存太小导致的问题,可以查看这篇日志:http://blog.sina.com.cn/s/blog_5904ea280100g614.html 的解决方案。

3. 查看“错误1053:服务并未及时响应启动或控制请求”错误原因:

服务器只装了oracle,也没有开启任何软件,不可能出现内存太小的问题,上述内容并没有帮我解决问题,于是我对另一个问题进行了调查,看看是不是因为这个问题而导致的连锁反应。

首先是百度告知的一个简单方法:http://zhidao.baidu.com/question/118588548.html

试了仍然不成功,则查看第二个方法:http://topic.csdn.net/u/20070322/09/23e755dd-19b8-47b8-9418-b9384abf6311.html 第5、6楼qingdou的回复,尝试重建监听仍然失败。

又查到一个解决方法,即重建监听不成就重建实例,在cmd下调用oradim命令创建了一个新的实例,然后调用oradim命令中的方法启动服务和实例,然后奇迹就出现了,我发现sqlplus可以登录了。登录sqlplus之后使用startup命令启动了数据库后,windows server “服务”中的OracleService***实例也可以正常启动了,然后再用sql developer就能够连接到数据库而没有12518的错误了。

总结:总的来说还是数据库实例没能启动而导致的一系列错误,虽然绕了弯路花了两天才搞定,不过也算有收获。12518的错误可能出现的情况太多,网上给的方法基本上都不详细,这个错误还是需要按照上面我写的内容一步一步的自己去定位错误具体原因才能找到错误根源。即便出现了12518错误,也有可能是其他错误引起的,所以还是需要检查各种东东才能准确错误并及时修改啊。

本文转载自:http://blog.sina.com.cn/s/blog_60b8e4e501069rub.html

共有 人打赏支持
rootliu
粉丝 2
博文 249
码字总数 2796
作品 0
海淀
数据库管理员
ORA-12537 TNS-12560 TNS-00530 ora-609解决

oracle 11g不能连接,卡住,ORA-12537 TNS-12560 TNS-00530 TNS-12502 tns-12505 ora-609 Windows Error: 54: Unknown error 解决方案。 今天折腾了一下午,为了查这个问题。。找了N多方案,...

lanybass
06/19
0
0
ora 12518 监听程序无法分发给客户机连接如何解决??

ora 12518 监听程序无法分发给客户机连接如何解决??

空指针
2012/09/10
1K
6
【故障|监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe

【故障|监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到...

小麦苗best
06/29
0
0
连接Oracle时报错ORA-12541: TNS: 无监听程序

遇到的问题:安装Oracle是,默认的安装方式先决条件检查通过不了,然后选择管理员安装,跳过更新,安装好了之后,用plsql登录连接,返回两种报错,ORA-12541: TNS: 无监听程序;另一种是ORA...

IT-Mamba
2016/12/06
139
0
Oracle数据库服务中常见的6个错误

没有人会否认Oracle是全球最有影响的数据库产品之一;不过好的东西似乎总不是那么好用(初看起来如此),甚至有些无情--总会给layman们一个个无情的错误号。下面是我个人的总结,条条有用,希望...

founder
2011/02/25
116
1

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部