sqlplus 为何连接不上?
题
我的目标是从我的 OS X 计算机连接到 Oracle 9i 实例。我已按照设置说明进行操作 这里 并顺利地完成了这些任务(最终)。但是,我发现 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.
呜呜等...
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)
)
)
也许需要设置一个环境变量?
更新
能够 ping 通 DB 主机没有问题。
尝试过...
sqlplus xxx/yyy@//dbhost/zzz
得到...
ERROR:
ORA-12170: TNS:Connect timeout occurred
尝试使用 SID
代替 SERVICE_NAME
在 tnsnames.ora 中。似乎并没有改变结果。恢复到 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
部分答案
谢谢大家的回答。他们很有帮助。我发现DNS有问题。我能够通过主机名 ping 通,所以认为应该可以正常工作。我也尝试过IP。地址。原来我需要 内部的 “10.1.x.x”IP它在这台 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 文件,并将内容复制到我的文件中。更改了参数,现在一切正常。不知道为什么我的不工作。
解决方案
由于您使用的是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
其他提示
您似乎括号正确的。
尝试使用SID:
下面是一个tnsnames.ora文件的一个示例:
IDENTIFIER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
)
(CONNECT_DATA = (SID = odb))
)
可以使用
sqlplus user/password@servicename_host
如果你不能连接可以使用
sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))
如果您使用的是Linux的另一个Unix操作系统,你需要使用别的引号()由shell解释
e.g
sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
有可能是你的工作目录生成一个文件SQLNET.LOG。这可能会帮助你,或者如果您发布的内容,可能会给我们更多的信息。
在你的榜样,你想要两个不同的东西。在命令行中你用“XXX / YYY @ ZZZ”。它看起来像这样成功地找到tnsnames.ora中的“ZZZ”条目,但超时表示它是任何从服务器没有得到响应。你可以ping DBHOST成功?
在你的第二次尝试,你刚刚输入“XXX”为用户名;这是有道理的,如果你没有习惯的SQLPlus,但你可以看到没有一点它会提示您输入数据库名称。所以在这种情况下,它试图连接到“XXX / YYY”没有服务名称,导致第二个错误。这只是意味着你不会有一个默认的服务名称设置做。所以这个错误来自不完整的输入。 (你会在用户名提示符下输入“XXX @ ZZZ”在此提示到指定服务名称的用户名。实际上,你可以进入整个连接字符串“XXX / YYY @ ZZZ”,如果你不介意的密码为可见。)
您是否尝试过使用telnet去的开放端口,以确保防火墙不会阻止你?可以是值得一试telnet端口-NUM宿主
你设置环境与 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).
我也有类似的问题,似乎是甲骨文的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中会询问您的用户名/密码,它会愚蠢失败,如果你在提示符下键入他们一个虚假的错误信息。如果你把它们在连接字符串的开头它只(两者)。
笨甲骨文!!!
跟随 这 分步安装和安装后方法的链接..小心它。
并使用 sql plus 连接:
- 用户名将是系统,按照上面链接中给出的说明
- 您的密码不能是 Tiger,而是您在安装开始时设置的密码
附:如果您在测试安装时发现连接 Oracle Enterprise Manager 出现问题(浏览器不兼容),并且您的浏览器是 Google Chrome,请不要惊慌。点击后页箭头和下一页箭头以同意条款,然后单击“确定”。
我一天之内就在我的机器上解决了这个问题。但这对你来说只是几小时的事情。
来源:我是计算机科学工程师,主要用java编写代码
我有同样的错误(ORA-12162:TNS:网络服务名称指定错误),但不同的原因(在Windows 7企业64位)。希望这可以帮助别人:
I.T。在我的工作安装32bit和64bit的Oracle和基于我的PATH变量,壳在SQLPLUS.EXE 64位路径搜索相比,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环境变量,使得两个安装可以使用不同的主目录。