oracle - 为什么我不能使用 SQLcl 通过 jdbc 连接

标签 oracle sqlplus sqlcl

我可以使用 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

最佳答案

看起来您的 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。

关于oracle - 为什么我不能使用 SQLcl 通过 jdbc 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843426/

相关文章:

oracle - 为什么 TOAD 和 SQLPlus 中的结果不同?

oracle - 如何使用 SQLcl 和 SQLPlus 连接到 Oracle 数据库,但没有 TNSNames.ORA 文件?

oracle - sqlcl错误日志配置

java.sql.SQLException : Invalid Oracle URL specified for Java8 using oracle driver

c# - 避免使用 Entity Framework 的 Oracle 模式名称

java - 插入新行,并通过简单计算增加最大值(并发问题)

sql - 数据库使用无效字符集(非 UTF8)

oracle - 何时或为何在 Oracle 数据库中使用 "SET DEFINE OFF"

windows - 如何在Windows命令脚本中使用sql*plus进行流控?