之前ODI的运行一切正常,目标机器连接源数据库也都没问题。后来由于需要换存储,因此对源的数据库rac进行了重装,但是数据库实例名,服务名,IP地址什么的都没改。但是发现进行ODI抽取时遇到了错误,报错信息如下:
“ORA-12545: 因目标主机或对象不存在,连接失败。”
分析发现时在存储过程中调用远程表时遇到错误,在plsql中执行,发现也报错,但是再执行就不会有这个错误了,重新登录又出现,再试又不出现了,后来再试发现重复不了该问题。 因此考虑是数据库连接的问题,上网查询,发现遇到该问题的也很多,都说是监听的问题。
于是打开进入到 D:\oracle\ora92\network\log\listener.log,查看监听日志,发现监听报错,采用了网上的方法
下面尝试连接远端RAC数据库:
$ exit
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
警告: 您不再连接到 ORACLE。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
警告: 您不再连接到 ORACLE。
SQL> CONN NDMAIN/NDMAIN@TESTRAC
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
可以看到,连接失败的概率还是很高的。其实只有在本地hosts文件中加上RAC实例所在服务器的ip和主机名信息,就可以避免这个错误:
SQL> host
$ su -
Password:
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
Sourcing //.profile-EIS.....
root@ahrac1 # vi /etc/hosts
#
# Internet host table
#
172.25.198.224 racnode1-vip
172.25.198.225 racnode2-vip
root@ahrac1 # exit
$ exit
SQL>
下面再次尝试连接RAC数据库:
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
SQL> CONN NDMAIN/NDMAIN@TESTRAC已连接。
问题已经解决。不过由于只修改当前客户端的配置,所以这种方法也只对当前客户端有效。
本文介绍了解决Oracle数据库连接时出现的ORA-12545错误的方法。通过检查监听日志并更新客户端hosts文件中的RAC实例服务器IP及主机名信息,成功解决了ODI抽取过程中遇到的连接失败问题。
169

被折叠的 条评论
为什么被折叠?



