我们最近更改了物理数据库,新的服务器,新的位置,相同的数据库模式和数据,自从转换以来,每当我们尝试直接连接到我们自己的桌面类型应用程序中的数据库时,大约一半的时间我们会收到这个错误:
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)我有数据库的SID,这是JDBC连接所依赖的,但是将它添加到tnsnames.ora并不能提高建立连接的几率。我不太了解tnsnames文件是如何被oracle用来智能地解决这个问题的,所以如果你有什么建议或者看到一些明显缺失的东西,请让我知道。
编辑:新的数据库可能是两个负载平衡的数据库,这可能是问题的一部分。
发布于 2009-04-15 18:45:25
最近,我们的应用程序也遇到了类似的问题。应用程序有时会连接到Oracle RAC,有时会抱怨ORA-12545。简而言之,问题是当我们在TNSNAMES.ORA中使用虚拟IP地址时,服务器有一个真实的名称,一旦我们通过system32\drivers\etc\hosts文件添加了服务器名称到IP地址的映射,一切都开始正常工作。
我在我的博客http://dcarapic.blogspot.com/2009/04/intermittent-ora-12545-error.html中写了更多
发布于 2009-01-15 00:38:13
啊,我喜欢断断续续的问题:) (在下面我不得不替换下划线字符,因为我不知道这种维基语言的转义字符)
您是否总是使用相同的操作系统用户来连接和执行tnsping?
检查指向不同tnsnames.ora位置的环境变量TNSunderscoreADMIN。在$TNSunderscoreADMIN所指向的位置或不同的$ORACLEunderscoreHOMES (例如,如果您安装了两个tnsnames.ora)中扫描客户端,以查找重复的Oracle。
同样,检查您是否对所有连接尝试和tnsping使用相同的$ORACLEunderscoreHOME和$PATH环境变量。(例如,总是相同的操作系统用户或每个用户具有相同的值)
我看到tnsping输出报告版本9.2,所以这不太可能,但在11g中,DB向监听器注册可能需要一分钟左右的时间。(对于10g,可能也是如此)。在此之前尝试连接将找不到目标。
另一种不太可能的可能性是,具有相同服务名称的服务是否仍在旧主机服务器上进行通告?如果可能,请将其移除。
在那之后,我会开始关注网络本身。对服务器执行ping操作是否总是成功且快速?如果您在tnsnames.ora中使用主机名而不是IP,主机名是否可靠地解析为正确的IP (nslookup)。是否有本地防火墙?如果有,它是否在运行?
向卡尔致敬
发布于 2009-04-15 18:54:12
如果您使用的是Oracle 10g,则可以改用Easy Connect处理程序:
//servername/instancename,
//1.2.3.4/my.url.com在你的情况下。
它不受lots of TNSNAMES问题的影响。
https://stackoverflow.com/questions/444741
复制相似问题