2

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

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)

我有数据库的 SID,这是 JDBC 连接所依赖的,但将其添加到 tnsnames.ora 并不能提高建立连接的几率。我不太了解 oracle 如何使用 tnsnames 文件来智能地解决此问题,因此,如果您有建议或发现明显缺失的内容,请告诉我。

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

4

3 回答 3

1

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

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

于 2009-04-15T18:45:25.173 回答
0

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

您是否总是使用同一个操作系统用户来连接和执行 tnsping?

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

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

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

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

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

问候卡尔

于 2009-01-15T00:38:12.597 回答
0

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

//servername/instancename

,

//1.2.3.4/my.url.com

在你的情况下。

它对许多问题免疫TNSNAMES

于 2009-04-15T18:54:12.237 回答