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

时间:2016-06-15 18:45:33

标签: 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中,我只需在" custom jdbc url"下输入以下内容:它连接没有任何问题,所以我希望我可以使用相同的URL通过命令行连接,但到目前为止,它无法正常工作:

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

1 个答案:

答案 0 :(得分:5)

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

您的SQLcl URL正在使用服务名称,如/vdbsl14中的斜杠所示。使用SID代替(即在该URL中更改/ to :)应该有效,因为它使用的是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中的listener.ora case定义了一个显示服务名称的TNS别名。 (/service_name不太可能有所帮助,但可以给出提示,或者如果幸运的话显示默认服务名称。)

您可以在JDBC URL中使用该服务名称,如tnsnames.ora

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

您甚至可以将完整的TNS描述传递给SQL * Plus(不确定SQLcl),但这有点令人不快。如果您没有/想要where company not like '%[a-zA-Z]%' and -- has at least one vowel company like '%[^ a-zA-Z0-9.&]%' -- has a not-allowed character ,您可以使用'easy connect'语法,这与您用于SQLcl的语法相同 - 但作为服务名称,它不允许SID。