7

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

尝试在 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

部分答案

谢谢大家的回答。他们很有帮助。我发现有一个DNS问题。我能够通过主机名 ping,所以认为应该可以正常工作。我也试过IP地址。原来,我需要内部的“10.1.xx”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 文件,并将内容复制到我的文件中。更改了参数,现在一切正常。不知道为什么我的不工作。

4

9 回答 9

9

由于您使用的是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

于 2009-04-17T17:40:10.757 回答
4

你的括号似乎是正确的。

尝试使用 SID:

以下是 tnsnames.ora 文件的示例:

IDENTIFIER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
    )
    (CONNECT_DATA = (SID = odb))
  )

在此处阅读有关 SID 的信息。

于 2009-04-17T17:45:57.590 回答
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 解释

例如

sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
于 2010-03-25T09:41:39.003 回答
1

您的工作目录中可能会生成一个 sqlnet.log 文件。这可能会对您有所帮助,或者如果您发布其内容,它可能会为我们提供更多信息。

在您的示例中,您正在尝试两种不同的事情。在命令行上,您使用了“xxx/yyy@zzz”。看起来这是在 tnsnames.ora 中成功找到“zzz”条目,但超时表明它没有从服务器获得任何响应。能ping 通dbhost 成功吗?

在您第二次尝试时,您刚刚输入了“xxx”作为用户名;如果您不习惯 SQLPlus,这是有道理的,但正如您所见,它没有提示您输入数据库名称的地方。所以在这种情况下,它试图在没有服务名称的情况下连接到“xxx/yyy”,导致第二个错误。这只是意味着您没有设置默认服务名称。所以这个错误来自不完整的输入。(您可以输入“xxx@zzz”作为用户名以在此提示符处指定服务名称。如果您不介意密码为可见的。)

于 2009-04-17T18:12:02.973 回答
1

您是否尝试过使用 telnet 访问开放端口以确保防火墙没有阻止您?可能值得一试 telnet port-num host

于 2009-04-17T18:39:28.040 回答
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).
于 2009-04-17T22:36:54.193 回答
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 要求您输入用户名/密码,如果您在提示符下输入它们,它也会愚蠢地失败并显示虚假错误消息。仅当您将它们(两者!)放在连接字符串的开头时,它才有效。

愚蠢的甲骨文!!!

于 2015-04-02T23:08:56.397 回答
0

按照链接逐步安装和安装后方法..小心它。

并与 sql plus 连接:

  1. 用户名将按照上述链接中的说明成为系统
  2. 您的密码不能是tiger,而是您在安装开始时设置的密码

PS:如果您的浏览器是 Google Chrome,则在测试安装时发现连接 Oracle Enterprise Manager 的问题(浏览器不兼容)不要惊慌。点击后页箭头和下一页箭头以同意条款并单击“确定”。

我在一天之内就在我的机器上解决了这个问题.. 但这对你来说只是几小时的事情。

资源:我是计算机科学工程师,主要是用 Java 编写代码

于 2013-09-10T09:34:20.647 回答
0

我遇到了同样的错误(ORA-12162:TNS:net 服务名称指定不正确),但原因不同(在 Windows 7 Enterprise 64 位上)。希望这可以帮助某人:

我工作时的 IT 安装了 32 位和 64 位 Oracle,并且基于我的 PATH 变量,shell 在 64 位路径中查找 SQLPLUS.exe 与 32 位路径相比。

不同的路径使用不同的 TNSNAMES.ora 文件,并且我在 64 位路径中没有连接字符串:

Oracle\product\11.1.0\client_1_64bit\network\admin\TNSNAMES.ora

我只有 32 位 TNSNAMES.ora 中的连接字符串:Oracle\product\11.1.0\client_1_32bit\network\admin\TNSNAMES.ora

此外,由于有多个 ORACLE 安装,我必须删除 ORACLE_HOME 环境变量,以便两个安装可以使用不同的主目录。

于 2013-10-21T20:39:30.237 回答