这是我的用例:
- 我们正在使用虚拟机。几天前我创建了新的Oracle数据库。我克隆了这台机器,它有不同的IP地址。
- 今天我想用SQLPlus连接到数据库,但是我连接超时了。我尝试过tnsping命令,这是该命令的输出:
醇>C:\ Users \ Administrator> tnsping clm
适用于64位Windows的TNS Ping实用程序:版本11.2.0.1.0 - 生产于09-JAN-2 014 08:36:31
版权所有(c)1997,2010,Oracle。保留所有权利。
使用过的参数文件: C:\应用\管理员\产品\ 11.2.0 \ dbhome_1 \网络\管理员\ SQLNET.ORA
使用EZCONNECT适配器来解析别名 试图联系(DESCRIPTION =(CONNECT_DATA =(SERVICE_NAME =))(ADDRESS =(PROTO COL = TCP)(HOST = 9.142.60.187)(PORT = 1521))) TNS-12535:TNS:操作超时
奇怪的是,当前的数据库地址与9.142.60.187不同。 sqlnet.ora也不包含任何有趣的数据:
SQLNET.AUTHENTICATION_SERVICES =(NTS)
NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT) ? ADR_BASE = C:\ app \ Administrator \ product \ 11.2.0 \ dbhome_1 \ log
如何连接sqlplus? 有趣的是,我能够使用jdbc驱动程序连接到数据库,它工作正常。
答案 0 :(得分:2)
您的sqlnet.ora配置为首先尝试使用TNSNAMES(TNS_ADMIN定向文件夹中的tnsnames.ora,如注册表,环境变量中所定义或从默认位置获取)来解析clm
到您网络中的路径将SQL * Net映射到TCP / IP以及其他可能的映射。
从你的tnsping似乎无法解决。因此,SQL * Net尝试第二个:EZCONNECT。 See Oracle docs on that one。
可能你正在使用某个EZCONNECT连接字符串,例如user /pwd@//9.4.60.187,没有服务名称和端口。或者我对EZCONNECT的了解太简单了;不知何故,似乎将clm
翻译成//9.142.60.187
。 这可能是由以下问题的答案解释的:您在DNS中的主机名clm
或主机文件映射到9.142.60.187吗?
我不建议使用EZCONNECT,我总是喜欢硬编码tnsnames.ora,指定所需的一切。 EZCONNECT可以继续工作。
您可以在样本中包含克隆的IP地址吗?
您是否可以在示例中包含ping clm
和nslookup clm
的结果?
答案 1 :(得分:0)
将(HOST=9.142.60.187)
中的IP地址更改为服务器的当前IP地址。可能在JDBC驱动程序中使用主机名而不是ip地址,这就是它工作的原因。您也可以尝试在(HOST=9.142.60.187)
中提供主机名,例如,如果主机名是ora_server,则将其更改为(HOST=ora_server)
答案 2 :(得分:0)
由于tnsping clm
正在使用EZConnect,因此tnsnames.ora
没有名为CLM
的连接别名,但clm
正在被解析为9.142.60.187
的主机名}。它默认使用端口1521,因为它没有使用特定端口的指令。然后,与该地址或至少该端口的连接超时 - 它可能不存在,可能在某处无法到达,或者可能被防火墙阻止。
ping clm
应该显示相同的地址,并且可能也会超时。该主机可能存在于您的hosts
文件中,或者正由DNS解析,可能会附加一个默认域,ping
也会显示该主机。如果它是旧服务器的名称,您可能需要更新hosts
文件,这可能会让它开始工作。
如果您的数据库实际上被称为CLM
,那么您可以在tnsnames.ora
中创建一个条目,指向您的JDBC连接已经使用的侦听器的正确IP地址。或者您可以使用EZConnect格式作为连接字符串;像sqlplus user/password@//<your IP>:1521/<your service name>
这样的东西。如果您不确定,可以使用lsnrctl services
检查IP地址,端口和服务名称。
如果您与数据库位于同一主机上,那么您也不需要这样做;大概你现在正在尝试sqlplus user/password@clm
,但是如果设置了ORACLE_SID
,你就可以sqlplus user/password
,而且不会让听众感到麻烦。