首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可疑Oracle连接《TNSNAMES.ora帮助》

可疑Oracle连接《TNSNAMES.ora帮助》
EN

Stack Overflow用户
提问于 2009-01-14 21:23:00
回答 3查看 6.4K关注 0票数 2

我们最近更改了物理数据库,新的服务器,新的位置,相同的数据库模式和数据,自从转换以来,每当我们尝试直接连接到我们自己的桌面类型应用程序中的数据库时,大约一半的时间我们会收到这个错误:

代码语言:javascript
复制
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输出:

代码语言:javascript
复制
DB_CONNECTION =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 1.2.3.4)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = MY.URL.COM)
  )
)

和TNSPING:

代码语言:javascript
复制
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用来智能地解决这个问题的,所以如果你有什么建议或者看到一些明显缺失的东西,请让我知道。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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中写了更多

票数 1
EN

Stack Overflow用户

发布于 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)。是否有本地防火墙?如果有,它是否在运行?

向卡尔致敬

票数 0
EN

Stack Overflow用户

发布于 2009-04-15 18:54:12

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

代码语言:javascript
复制
//servername/instancename

代码语言:javascript
复制
//1.2.3.4/my.url.com

在你的情况下。

它不受lots of TNSNAMES问题的影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/444741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档