【问题标题】:Why can't I connect via jdbc using SQLcl为什么我不能使用 SQLcl 通过 jdbc 连接
【发布时间】:2016-06-16 06:45:23
【问题描述】:

我可以使用 SQLDeveloper 连接到远程数据库。

我正在尝试从命令行使用 sqlcl 连接到同一个数据库,但出现错误。

这是我正在运行的命令:

/bin/sql username/pass@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14 

我也试过了:

/bin/sql username/pass@//delphix.......etc.

这是我收到的错误:

SQLcl: Release 4.2.0.16.131.1023 RC on Wed Jun 15 11:36:33 2016

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

  USER          = username
  URL           = jdbc:oracle:thin:@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14
  Error Message = Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
Username? (RETRYING) ('username/*********@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14'?) 

同样在 SQLDeveloper 中,我只需在“自定义 jdbc url”下输入以下内容,它就可以毫无问题地连接,所以我希望我可以使用相同的 URL 通过命令行进行连接,但到目前为止,它不起作用:

jdbc:oracle:thin:@delphix-vdb-n-1.va2.b2c.nike.com:1521:vdbsl4

【问题讨论】:

    标签: oracle sqlplus sqlcl


    【解决方案1】:

    您的 SID 和服务名称看起来不一样。在 SQL Developer 中,您似乎正在使用 SID - 至少在您显示的自定义 JDBC URL 中 - 如:vdbsl4 中的冒号所示。

    您的 SQLcl URL 正在使用服务名称,如 /vdbsl14 中的斜线所示。在该 URL 中改用 SID(即将 / 更改为 :) 应该可以工作,因为它使用的是 JDBC:

    sqlcl username/pass@delphix-vdb-n-1.va2.b2c.nike.com:1521:vdbsl14
    

    或者(在我看来,最好是)找出您的服务名称实际上是什么。如果您对数据库有足够的权限,您可以从 SQL Devleoper 执行 show parameters service_names,或者如果您以 DBA 身份访问服务器,您可以执行 lsnrctl services,或者甚至查看 tnsnames.ora,以防有 TNS 别名定义显示服务名称。 (listener.ora 不太可能有帮助,但可以提供提示,或者如果幸运的话,可以显示默认服务名称)。

    您可以在 JDBC URL 中使用该服务名称,如 /service_name

    您还可以使用 SQLcl(或 SQL*Plus)中的 TNS 别名。您可能已经有一个tnsnames.ora 可用;如果没有,您可以从您的服务器复制它,或创建您自己的。这可以引用 SID 或服务名称。

    您甚至可以将完整的 TNS 描述传递给 SQL*Plus(不确定 SQLcl),但这有点令人不快。如果您没有/想要tnsnames.ora,您可以使用“easy connect”语法,这与您用于 SQLcl 的语法相同 - 但 必须 是服务名称,它不允许 SID。

    【讨论】:

    • 按照您的建议修复 SID 有效。经过 3 周的痛苦,我终于可以连接了,谢谢!
    • 我仍然会尝试找出服务名称并使用它,但也许这正是我习惯的......
    • @AlexPoole - 程序点:检查 listener.ora 和/或 tnsnames.ora 可能会也可能不会产生任何结果。侦听器可以很容易地使用所有默认值运行,根本不需要 listener.ora,这完全取决于数据库的动态注册。它们值得检查潜在的线索,但肯定不是确定的。但也许这就是你的想法。
    • @EdStevens - 确实如此,而且监听器,ora 通常不会列出服务名称(可能是默认值除外)。然后是来自 sqlnet.ora 的域信息......所以是的,最好的提示,更有可能来自 tnsnames.ora。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2016-03-14
    • 2019-04-05
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多