ODI抽取中出现“ORA-12545: 因目标主机或对象不存在,连接失败。”

时间:2022-11-23 11:34:18

    之前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已连接。

问题已经解决。不过由于只修改当前客户端的配置,所以这种方法也只对当前客户端有效。