我的目标是从我的 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))
  )

阅读关于SID这里

可以使用

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 连接:

  1. 用户名将是系统,按照上面链接中给出的说明
  2. 您的密码不能是 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环境变量,使得两个安装可以使用不同的主目录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top