2

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

1 回答 1

9

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

或者(在我看来,最好是)找出您的服务名称实际上是什么。如果您对数据库有足够的权限,您可以show parameters service_names从 SQL Devleoper 进行操作,或者您可以作为 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。

于 2016-06-15T19:12:50.883 回答