代码之家  ›  专栏  ›  技术社区  ›  18Rabbit

Hinky Oracle连接(tnsnames.ora帮助)

  •  2
  • 18Rabbit  · 技术社区  · 16 年前

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

    SQL*Loader-704: Internal error: ulconnect: OCIServerAttach[0]
    ORA-12545: Connect failed because target host or object does not exist
    

    剩下的时间,它立刻连接起来,没有任何问题。我们通过JDBC建立连接的应用程序似乎没有任何问题,但是我们在执行tnsnames.or a查找(或者至少是我的直觉)时会遇到问题。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文件智能地解决这个问题,因此如果您有建议或看到明显缺少的内容,请告诉我。

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   dcarapic    16 年前

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

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

        2
  •  0
  •   Karl    16 年前

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

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

    检查环境变量tns[underline]admin是否指向不同的tnsnames.ora位置。扫描客户端以查找重复的tnsnames.or a;可以在$tns[underline]admin指向的位置,也可以在不同的$oracle[underline]家中(例如,如果安装了2个oracle客户端)。

    同样,检查您是否正在为所有连接尝试和tnsping使用相同的$oracle[下划线]home和$path环境变量。(例如,总是相同的操作系统用户或每个用户具有相同的值)

    我看到tnsping输出报告了版本9.2,所以这不太可能,但是在11g中,db向侦听器注册,这可能需要一分钟左右的时间。(可能同样适用于10g)。在此之前尝试连接将找不到目标。

    另一个不太可能的可能性是,在旧的主机服务器上是否仍在通告具有相同服务名称的服务?如有可能,将其拆下。

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

    当做 卡尔

        3
  •  0
  •   Quassnoi    16 年前

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

    //servername/instancename
    

    ,

    //1.2.3.4/my.url.com
    

    以你为例。

    它免疫 太多了 属于 TNSNAMES 问题。

    推荐文章