客户端使用PL/SQL连接到公司的ORACLE RAC.不定期的报错,内容如下:

不能登录为 tvmall_test

ORA-12545: 因目标主机或对象不存在, 连接失败

通过查找资料,找到原因。


原因:

当有监听器的LOAD_BALANCE时 ,每当client建立一个链接的时候listener是需要给client一个地址去连接的,但是它给的并不是ip,而是给的hostname,所以客户端再用这个hostname去链接的时候自然就要报"ora-12545 因目标主机或对象不存在,连接失败"当配置LB后,监听接收到请求后,假如要被重定向到remote listener,此时发给客户机的链接信息是remote listener的hostname,而不是IP。


Solution:

在需要连接的客户端处修改hosts,手动指定rac上相关主机名对应的ip

例如:

172.16.yy.xx    db1srv

172.16.yy.xx    db2srv

172.16.yy.xx    db1

172.16.yy.xx    db1-vip

172.16.yy.xx    db2

172.16.yy.xx    db2-vip


当然,你也可以在DNS server创建A记录来解决该问题。