当前位置: 首页 > 知识库问答 >
问题:

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

方坚壁
2023-03-14

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

共有1个答案

屠华辉
2023-03-14

看起来您的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执行显示参数服务\u名称,或者如果您作为DBA访问服务器,则可以执行lsnrctl服务,甚至可以查看tnsname。ora,以防定义了显示服务名称的TNS别名。(listener.ora可能没有帮助,但可以给出提示,或者如果幸运的话,可以显示默认的服务名称)。

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

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

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

 类似资料:
  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:

  • 问题内容: 我无法通过Java API连接到原始ElasticSearch集群。 复制: 结果: 结果: 因此,一切都可以通过HTTP运行。通过Java尝试(每个页面): 我得到以下堆栈跟踪: 与最接近的事我发现,到目前为止,这个问题是在这里,但线程落后了,但未得到解决。 问题答案: TransportClient的默认端口为9300。您必须在Java代码中使用它而不是9200。这可能是连接失败的

  • 我无法通过Java API连接到vanilla ElasticSearch集群。 复制: 我得到以下堆栈跟踪: 到目前为止,我发现的最接近这个问题的东西是这里,但线程拖尾没有解决。

  • 我正在看这个leetcode挑战: 我的代码不能通过以下测试用例: 您的输入: 输出: 预期:

  • 我想通过数组映射,但我得到一个错误:TypeError: locationAddress.map不是一个函数 我是新来的反应和反应钩。我一直试图简化数组,但运气不好。知道为什么这不起作用吗? 编辑:到目前为止,我尝试了答案中的所有更改,但错误仍然存在。我包括了更多的代码和包。json文件。我尝试停用一些函数,如useEffect,现在只有在我尝试键入要映射的输入字段时才会显示错误。 找到解决方案:

  • 问题内容: 使用JDBC连接池工具(如DBCP或c3p0)有什么好处? 如果只有 一个* 用户的 小型CRUD 应用程序,我们是否可以将 一个 连接会话创建为一个 单例 ? * PS :我正在构建一个带有小型数据库(5个表)的小型后端应用程序。 问题答案: 从Jon Skeet的答案到连接和语句池的好处是什么?: 创建到数据库服务器的网络连接是(相对)昂贵的。同样,要求服务器准备SQL语句(相对)