我的目标是从OS X机器连接到Oracle 9i实例。我按照设置说明here进行了操作,没有错误(最终)。但是,我发现sqlplus无法连接:
[ ethan@gir ~ ]$ sqlplus xxx/yyy@zzz
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Looooong等待......
ERROR:
ORA-12170: TNS:Connect timeout occurred
Enter user-name: xxx
Enter password:
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Enter user-name:
我的tnsnames.ora
文件...
zzz =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = dbhost)
(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zzz)
)
)
也许有一个需要设置的env变量?
更新
能够ping数据库主机没问题。
...试过
sqlplus xxx/yyy@//dbhost/zzz
... GOT
ERROR:
ORA-12170: TNS:Connect timeout occurred
在tnsnames.ora中使用SID
代替SERVICE_NAME
进行了尝试。似乎没有改变结果。恢复为SERVICE_NAME
。
sqlnet.log中的最后几个条目...
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for MacOS X Server: Version 10.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
Time: 17-APR-2009 10:33:06
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
nt secondary err code: 60
nt OS err code: 0
***********************************************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for MacOS X Server: Version 10.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
Time: 17-APR-2009 11:24:08
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
nt secondary err code: 60
nt OS err code: 0
PARTIAL ANSWER
感谢大家的回答。他们很有帮助。我发现存在DNS问题。我能够通过主机名ping,所以认为应该正常工作。我也试过I.P.地址。原来我需要内部“10.1.x.x”I.P。它可以在这个OS X机器上运行的地址(但在Windows上主机名很好)。
此时,我可以连接......
sqlplus xxx/yyy@//INTERNAL_IP/zzz
但是,将这些值输入到tnsnames.ora中,这仍然不起作用......
sqlplus xxx/yyy@zzz
...
ORA-12154: TNS:could not resolve the connect identifier specified
我搜索了一个接近我需要的示例tnsnames.ora文件,并将内容复制到我的文件中。改变了参数,现在一切正常。不知道为什么我的工作不起作用。
答案 0 :(得分:8)
由于您使用的是10g
客户端,因此建议您使用Easy Connect
语法:
export TWO_TASK=//dbhost/zzz
sqlplus xxx/yyy
,或者只是这个:
sqlplus 'xxx/yyy@//dnhost/zzz'
同时检查ORACLE_HOME
点到正确的文件夹:tnsnames.ora
$ORACLE_HOME/network/admin/tnsnames.ora
答案 1 :(得分:4)
您的括号似乎正确。
尝试使用SID:
以下是tnsnames.ora文件的示例:
IDENTIFIER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
)
(CONNECT_DATA = (SID = odb))
)
答案 2 :(得分:2)
您可以使用
sqlplus user/password@servicename_host
如果无法连接,可以使用
sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))
如果你使用linux另一个* Nix OS你需要使用引号,否则()由shell解释
e.g
sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
答案 3 :(得分:1)
您的工作目录中可能生成了一个sqlnet.log文件。这可能会对您有所帮助,或者如果您发布其内容,它可能会为我们提供更多信息。
在你的例子中,你正在尝试两种不同的东西。在命令行中使用“xxx / yyy @ zzz”。看起来这是在tnsnames.ora中成功找到“zzz”条目,但超时表明它没有得到任何来自服务器的响应。你能成功ping dbhost吗?
在第二次尝试时,您只输入“xxx”作为用户名;如果您不习惯SQLPlus,这是有道理的,但正如您所看到的那样,它没有提示您输入数据库名称。所以在这种情况下,它试图连接到没有服务名称的“xxx / yyy”,导致第二个错误。这只是意味着您没有设置默认服务名称。所以这个错误来自不完整的输入。 (您可以在此提示符下输入“xxx @ zzz”作为用户名来指定服务名称。如果您不介意密码,您可以在用户名提示符处输入整个连接字符串“xxx / yyy @ zzz”可见。)
答案 4 :(得分:1)
您是否尝试过使用telnet进入开放端口以确保防火墙没有阻止您?可能值得一试telnet port-num host
答案 5 :(得分:1)
您是否使用oraenv脚本设置了环境?
你试过tnsping
吗?
$ tnsping $ORACLE_SID
或许有助于比较连接到无法连接的计算机上的输出的计算机上的输出。至少这是我在联系我们的DBA之前所做的事情。
您可以更详细地了解oerr
命令的错误:
$ oerr ora 12170
12170, 00000, "TNS:Connect timeout occurred"
// *Cause: The server shut down because connection establishment or
// communication with a client failed to complete within the allotted time
// interval. This may be a result of network or system delays; or this may
// indicate that a malicious client is trying to cause a Denial of Service
// attack on the server.
// *Action: If the error occurred because of a slow network or system,
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT,
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
// If a malicious client is suspected, use the address in sqlnet.log to
// identify the source and restrict access. Note that logged addresses may
// not be reliable as they can be forged (e.g. in TCP/IP).
答案 6 :(得分:1)
我遇到了类似的问题,似乎Oracle sqlplus就是问题!
像其中任何一个一样工作:
> sqlplus MyUsername/MyPassword@MyHostname:1521/MyServiceName
> sqlplus MyUsername/MyPassword@//MyHostname:1521/MyServiceName
(//在主机名之前是可选的)。但是,保留密码或用户/通过都失败如下:
sqlplus @//MyHostname:1521/MyServiceName
SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql"
Enter user-name: MyUsername
Enter password: MyPassword
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
因此,即使sqlplus要求您输入用户名/密码,如果您在提示符下键入错误消息,它也会因为出现错误消息而愚蠢地失败。它只适用于将它们(两个!)放在连接字符串的开头。
愚蠢的Oracle !!!
答案 7 :(得分:0)
关注THIS逐步安装和安装后方法的链接......请小心。
并与sql plus连接:
P.S:如果您在浏览器是Google Chrome时测试安装时发现连接Oracle Enterprise Manager的问题(浏览器不兼容),请不要惊慌。点击后页箭头和下一页箭头以同意条款并点击确定。
我在一天之内在我的机器上解决了这个问题..但这对你来说只是几个开胃菜。
soruces:我是计算机科学工程师,主要是java中的代码
答案 8 :(得分:0)
我遇到了同样的错误(ORA-12162:TNS:错误地指定了网络服务名称),但原因不同(在Windows 7 Enterprise 64位上)。希望这有助于某人:
I.T。在我的工作中安装了32位和64位Oracle,并且基于我的PATH变量,shell在64位路径中查找了SQLPLUS.exe与32位路径相比。
不同的路径使用不同的TNSNAMES.ora文件,而我在64位路径中没有连接字符串:
甲骨文\产品\ 11.1.0 \ client_1_64bit \网络\管理员\ TNSNAMES.ORA
我只有32位TNSNAMES.ora中的连接字符串: 甲骨文\产品\ 11.1.0 \ client_1_32bit \网络\管理员\ TNSNAMES.ORA
此外,由于有多个ORACLE安装,我必须删除ORACLE_HOME环境变量,以便两个安装都可以使用不同的主目录。