注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

无线时代辐射无穷

抓紧生宝宝,小心辐射

 
 
 

日志

 
 

oracle中TNS-12545错误原因分析和解决办法方案  

2011-05-10 21:30:03|  分类: oracle |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在oracle中net8配置和连接的过程中,很容易出现TNS-12545错误,特别是用toad青蛙或sqldevelop之类的工具,经常遇到TNS-12545错误。查阅oracle的错误解释,可以看到:
TNS-12545 (ORA-12545): Connect failed because target host or object does not exist
原因:
客户端不能正确解析服务器的机器名。该错误一般出现在客户端没有设置或没有正确设置域名服务器的情况下出现。
解决办法:
疑问:出现这种情况时,有时可以用tnsping 测程序测试网络服务名可以通过,但还是不能用程序连接数据库,你会感到很奇怪。有时即使将客户端的tnsnames.ora中的服务器的机器名换为ip地址,还是会报错,这会令人感到更加疑惑,会不会系统有问题?
        要真正解决这个问题,需要知道客户端与服务器端在建立连接时所的数据流。并需要了解redirect session的概念。
        当一个客户端连接在window上的数据库,或以共享连接的模式连接在unix上的数据库时(此时数据库为MTS模式),客户端的连接会发生重定向现象,也就是listener在接受客户端的连接后,会发送一个重定向的包给客户端,然后客户端利用这个重定向包中提供的信息(服务器的ip(或机器名)和端口等信息)重新发起一个真正的到数据库的连接。当将客户端的tnsnames.ora中的服务器的机器名换为ip地址,客户端的连接还是会报ora-12545错的罪魁祸首就是这个重定向包中的内容。
        当客户端连接window上的数据库,或以共享连接的模式连接在unix上的数据库时,因为tnsnames.ora中为服务器的ip地址,所以不存在名字解析的问题,客户端的连接请求会到达listener,这也就是tnsping 测试程序测试网络服务名可以通过的原因,因为tnsping测试程序不会产生重定向问题。在listener接受客户端的连接后,会跟据客户请求的连接模式(专用连接还是共享连接)和操作系统对socket的实现的情况,决定是否需要将客户端的连接进行重定向,如果需要进行重定向,则会产生一个重定向包,该包中包含的服务器的地址信息为从listener.ora文件中得到的listener侦听的地址(根据listener.ora中的配置可能为服务器的机器名,也可能为服务器的ip地址),该包中还包含客户端应该重定向连接的端口信息(同listener侦听的端口可能不为同一个),客户端在收到这个重定向包后,解析出应该重新连接的服务器地址(机器名或ip)和端口,重新利用解析出的信息建立一个新的连接,此时如果客户端得到的为服务器的机器名并且没有配置域名解析,就会因为解析不出服务器的ip地址,从而导致产生ora-12545错误。
        所以,如果如果要彻底解决ora-12545错误,需要:
1) 配置一个域名服务器,并正确的设置客户端机器的域名服务器
2) 将服务器的机器名与ip配置在客户端的hosts文件中.
3) 将客户端tnsnames.ora和listener.ora中的地址部分都改为ip地址,而不是用机器名
4) 将客户端的连接改为专用连接,这样会避免redirect 现象,从而连接成功。(适用与客户端tnsnames.ora中为服务器的ip地址的情况下)
  评论这张
 
阅读(2191)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017