2009-01-14 86 views
2

我们最近更改了物理数据库,新服务器,新位置,相同的数据库模式和数据,自转换完成后,无论何时我们尝试直接连接到我们自己的桌面类型应用程序大约一半的时间我们得到这个错误:Hinky Oracle连接(TNSNAMES.ora帮助)

SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0] 
ORA-12545: Connect failed because target host or object does not exist 

其余的时间,它立即连接没有任何问题。我们通过JDBC建立连接的应用程序似乎没有任何问题,但是当我们做一些tnsnames.ora查找(或者至少是我的预感)时,我们会做这些事情。 TNSPING工作100%,但使用像SQLLDDR这样的Oracle可执行文件至少有50%的时间不能运行。这是我们的TSNNAMES文件的匿名snppet和TNSPING输出:

DB_CONNECTION = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521)) 
) 
    (CONNECT_DATA = 
    (SERVICE_NAME = MY.URL.COM) 
) 
) 

而且TNSPING:

C:\>TNSPING DB_CONNECTION 
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 

Copyright (c) 1997 Oracle Corporation. All rights reserved. 

Used parameter files: 
C:\oracle\ora92\network\admin\sqlnet.ora 


Used TNSNAMES adapter to resolve the alias 
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) 
(HOST = 1.2.3.4)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = MY.URL.COM))) 
OK (200 msec) 

我有DB,这是该SID什么的JDBC连接依赖,但其添加到tnsnames.ora并不会提高建立连接的可能性。我不太了解Oracle如何使用tnsnames文件来智能地解决此问题,因此如果您有任何建议或看到明显缺少的内容,请让我知道。

编辑:新的DB可能是两个负载平衡的数据库,可能是问题的一部分。

回答

1

我们最近曾与我们的应用程序类似的问题。应用程序有时会连接到Oracle RAC,有时它会使用ORA-12545进行投诉。 总之,问题在于,我们在TNSNAMES.ORA中使用虚拟IP地址时,服务器有一个真实的名称。一旦我们通过system32 \ drivers \ etc \ hosts文件添加了服务器名称到IP地址的映射,一切都开始正常工作。

我已经在我的博客 <无耻的广告> http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html < /无耻的广告>

+0

您在博客中链接到您的文章(http://tardate.blogspot.com/2007/06/check-locallistener-if-you-run-rac.html)非常好。很高兴终于明白为什么会发生这种情况,以及如何解决这个问题 – 2009-07-10 21:24:48

0

啊,爱是爱的间歇性问题:) (在下面我不得不更换下划线,因为我不知道这个wiki语言转义字符)

你总是使用相同的OS用户连接并执行tnsping?

检查环境变量TNS [下划线] ADMIN指向不同的tnsnames.ora位置。对客户端扫描重复的tnsnames.ora;无论是在$ TNS [underscore] ADMIN指向的位置还是在不同的$ ORACLE [underscore] HOMES(例如,如果您有2个Oracle客户端安装)指向的位置。

同样,检查您是否对所有连接尝试和tnsping使用相同的$ ORACLE [下划线] HOME和$ PATH环境变量。 (例如,总是相同的操作系统用户或每个用户具有相同的值)

我看到tnsping输出报告版本9.2,因此这不太可能,但在11g DB注册与侦听器,可能需要一分钟左右。 (也许10g也是如此)。尝试在此之前进行连接将无法找到目标。

另一个不太可能的可能性 - 是在旧的主机服务器上仍然宣传相同服务名称的服务?如果可能的话将其删除。

之后,我会开始看网络本身。平台服务器总是成功和快速?如果您在tnsnames.ora中使用的是主机名而不是IP,那么主机名是否可以正确解析为正确的IP(nslookup)。有没有本地防火墙,如果是的话,它的行为?

问候 卡尔

+0

SERVICE_NAME网址(MY.DOMAIN.COM)没有通过DNS解析为有效的网址(即,它不能被PING或由NSLOOKUP找到)。 – 18Rabbit 2009-01-15 14:42:24

0

如果使用Oracle 10g写多一点,你可以使用Easy Connect处理程序来代替:

//servername/instancename 

//1.2.3.4/my.url.com 

在你的情况。

它对很多TNSNAMES问题不起作用。