Hinky Oracle Connection(TNSNAMES.ora帮助)

时间:2009-01-14 21:23:00

标签: oracle tnsnames ora-12545

我们最近更改了物理数据库,新服务器,新位置,相同的数据库架构和数据,并且自更改以来,每当我们尝试在我们自己的桌面类型应用程序中直接连接到数据库时,大约有一半时间我们会收到此错误:

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文件和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文件来智能地解决这个问题,所以如果你有建议或者看到明显遗漏的东西,请告诉我。

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

3 个答案:

答案 0 :(得分:1)

我们最近在申请时遇到了类似的问题。该应用程序有时会连接到Oracle RAC,有时它会抱怨ORA-12545。 简而言之,问题是当我们在TNSNAMES.ORA中使用虚拟IP地址时,服务器有一个真实姓名。一旦我们通过system32 \ drivers \ etc \ hosts文件添加了服务器名称到IP地址的映射,一切都开始正常工作。

我在博客中写了更多内容 <无耻广告> http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html< /无耻广告>

答案 1 :(得分:0)

啊,要爱断断续续的问题:) (在下面我不得不替换下划线字符,因为我不知道这个wiki语言的转义字符号)

您是否始终使用相同的OS用户进行连接并进行tnsping?

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

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

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

另一种不太可能的可能性 - 是否仍在旧主机服务器上公布具有相同服务名称的服务?如果可能的话,将其移除。

之后我会开始关注网络本身。服务器的ping是否总是成功且快速?如果您在tnsnames.ora中使用主机名而不是IP,主机名是否可靠地解析为正确的IP(nslookup)。是否有本地防火墙,如果是这样的话?

此致 卡尔

答案 2 :(得分:0)

如果您使用Oracle 10g,则可以改为使用Easy Connect处理程序:

//servername/instancename

//1.2.3.4/my.url.com

在你的情况下。

它不受TNSNAMES问题批次的影响。