【问题标题】:Oracle Error:12505 TNS:listener does not currently know of SID given in connect descriptorOracle 错误:12505 TNS:侦听器当前不知道连接描述符中给出的 SID
【发布时间】:2021-08-03 16:40:34
【问题描述】:

我尝试将我的 Netbeans Java 项目连接到 Oracle 数据库,但它显示错误 ORA:12505 TNS:listener does not now know of SID given in connect descriptor 即使我使用 SQL Developer 连接,我也收到了同样的错误。

有人知道怎么解决吗?提前谢谢你。

注意:我在 CMD 中使用命令 SQLPlus,它工作正常。我的听众没有休息。

更新: 这是我的 listener.ora 文件上下文:

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\Oracle) (程序 = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\Oracle\bin\oraclr19.dll") ))

监听器 = (DESCRIPTION_LIST = (描述= (地址 =(协议 = TCP)(主机 = 本地主机)(端口 = 1521)) (地址 =(协议 = IPC)(密钥 = EXTPROC1521)) ))

这是 lsnrctl status 的结果

适用于 64 位 Windows 的 LSNRCTL:版本 19.0.0.0.0 - 开始生产 2021 年 5 月 13 日 18:36:25

版权所有 (c) 1991、2019、甲骨文。保留所有权利。

连接到 (描述=(地址=(协议=TCP)(主机=本地主机)(端口=1521))) 监听器的状态 ------------------------ Alias LISTENER 版本 TNSLSNR 用于 64 位 Windows:版本 19.0.0.0.0 - 生产开始日期 2021 年 5 月 13 日 17:28:29 正常运行时间 0 天 1 小时。 7 分钟。 56 sec Trace Level off 安全开启:本地 操作系统身份验证 SNMP OFF 侦听器参数 文件 C:\Oracle\network\admin\listener.ora 侦听器日志文件
C:\Oracle\base\diag\tnslsnr\DESKTOP-A10GTQJ\listener\alert\log.xml 监听端点总结...
(描述=(地址=(协议=tcp)(主机=桌面-A10GTQJ)(端口=1521))) (描述=(地址=(协议=ipc)(管道名称=\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=DESKTOP-A10GTQJ)(PORT=5500))(Security=(my_wallet_directory=C:\ORACLE\BASE\admin\system\xdb_wallet))(Presentation=HTTP)(会话=原始)) 服务摘要...服务“48f123709e024effbc4514551f7222c6”有 1 实例。实例“系统”,状态 READY,有 1 个处理程序 此服务...服务“52448234712340b69f274bcc790ecfe0”有 1 实例。实例“系统”,状态 READY,有 1 个处理程序 此服务... 服务“CLRExtProc”有 1 个实例。实例 "CLRExtProc",状态 UNKNOWN,有 1 个用于此服务的处理程序... 服务“orclpdb”有 1 个实例。实例“系统”,状态 READY, 有 1 个用于此服务的处理程序...服务“系统”有 1 实例。实例“系统”,状态 READY,有 1 个处理程序 此服务... 服务“systemXDB”有 1 个实例。实例 “系统”,状态 READY,有 1 个用于此服务的处理程序... 命令成功完成

【问题讨论】:

  • 您需要发布所涉及的连接字符串示例、listener.ora 文件的内容以及lsnrctl status 的输出。
  • 谢谢,我更新了这个问题。
  • 最好将实际文本添加到您的问题中,而不是链接到图像。
  • 作为一个侧面观察,您似乎已将容器数据库命名为“SYSTEM”。不是一个很好的选择。首先,名称确实应该传达一些含义,而 SYSTEM 并没有真正做到这一点。其次,SYSTEM也是数据库中默认账户之一的名称,虽然没有技术上的冲突,但会使得讨论和交流容易出错。在命名容器时,为什么不使用默认的 CDB?

标签: oracle netbeans


【解决方案1】:

CLRExtProc 不是数据库的 SID。它是一个允许 Oracle 与外部 .Net 库通信的扩展。如果您尝试连接到我看到列出的可插拔数据库,那么您必须为该数据库使用 service_name,而不是 SID。您的连接字符串将如下所示:

jdbc:oracle:thin@//localhost:1521/orclpdb

注意:在容器/可插拔数据库架构中,SID 只指向 container 数据库,绝不应该使用它来保存应用程序对象。一般来说,最好尽可能使用 service_name。

有关其他 JDBC 连接字符串格式,请参见此处:https://www.oracle.com/a/tech/docs/java-programming-with-oracle-database-19c.pdf

【讨论】:

  • 谢谢您,我尝试重新安装 Oracle 并完全按照您所说的进行,并且效果很好,但是我必须将 URL 中的“localhost”更改为我的 ID 地址。
【解决方案2】:

顺便说一句,您可以启用USE_SID_AS_SERVICE_listener_name。 在这种情况下,即使您在 SID 中指定了服务名称,您也可以连接到您的服务。

【讨论】:

  • 这仍然只允许连接到容器数据库,而不是 PDB。
  • @pmdba 很有趣,你为什么这么认为?你读过它的描述吗? “具有硬编码连接描述符的早期版本 Oracle 数据库的数据库客户端可以使用此参数连接到容器或可插拔数据库。”
  • 是的,我在向后看。你是对的。
猜你喜欢
  • 2015-08-31
  • 2014-01-07
  • 2014-04-21
  • 2013-08-14
  • 2017-08-22
  • 2018-11-12
相关资源
最近更新 更多