在尝试从我的工作站建立连接(实际上,我在WinXP32和Win764工作站上看到相同的行为)到Oracle服务器时,我总是尝试的第一件事是tnsping。当我这样做时,这就是我得到的:
> C:\>tnsping MYDBNAME
>
> TNS Ping Utility for 32-bit Windows:
> Version 10.2.0.1.0 - Production on
> 25-JAN-2 011 15:03:35
>
> Copyright (c) 1997, 2005, Oracle. All
> rights reserved.
>
> Message 3511 not found; No message
> file for product=NETWORK,
> facility=TNSMessage 3512 not found;
> No message file for product=NETWORK,
> facility=TNSAttempting to contact
> (DESCRIPTION = (ADDRESS_LIST =
> (ADDRESS = (PROTOCOL = TCP) (HOST =
> thisismyservername.com)(PORT = 1577)))
> (CONNECT_DATA = (SID = MYDBNAME)))
> Message 3509 not found; No message
> file for product=NETWORK, facility=TNS
因此,正如您所看到的,它正确检测我的tnsnames文件,并为指定的数据库选择正确的服务器地址和端口,但tnsping失败,出现3511和3509错误。
奇怪的是,使用sqlplus或Toad,来自同一个工作站,我可以成功连接到同一个数据库。
有谁可以解释这里发生的事情?
FWIW:
ORACLE_HOME系统环境变量(以及任何其他oracle环境变量)不设置。
ORACLE_HOME环境变量不一定要设置,它似乎依赖于每台机器。我的特殊问题是:Oracle 10g有一个已知的缺陷,即tnsping.exe根本无效。有一个补丁
答案 0 :(得分:4)
我相信当您的ORACLE_HOME
环境变量设置不正确时,可能会发生这种情况。 tnsping
仍可使用PATH
,但无法找到其消息文件。 echo %ORACLE_HOME%
显示什么,以及Oracle客户端实际安装在哪里?
这不一定会对Toad的访问产生任何影响,因为它不需要直接访问ORACLE_HOME
;您可能已经提供了完整的连接字符串,或者如果设置了TNS_ADMIN
,它可能会提取服务名称。
修改强>
您可能还有几个相互干扰的Oracle产品。如果是这样,请尝试开始 - >所有程序 - > Oracle安装产品 - >主页选择器,然后选择与您正在执行的tnsping
相关的那个。 (实际上这是针对9i客户端的;我认为10g你可能需要使用通用安装程序,通过Installed Products-> Environment进行更改,但无法检查)。
答案 1 :(得分:0)
除了设置ORACLE_HOME变量外,还应该确保c:\ orant \ bin;在您可能安装的其他oracle客户端的任何其他路径条目之前,条目就会出现。