我们最近更改了物理数据库、新服务器、新位置、相同的数据库架构和数据,自从更改后,每当我们尝试在自己的桌面类型应用程序中直接连接到数据库时,大约有一半的时间会出现此错误:
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 文件来智能地解决此问题,因此,如果您有建议或发现明显缺失的内容,请告诉我。
编辑:新数据库可能是两个负载平衡的数据库,这可能是问题的一部分。