【问题标题】:ORA-12505, TNS:listener does not currently know of SID given in connect descriptor?ORA-12505, TNS:listener 当前不知道连接描述符中给出的 SID?
【发布时间】:2015-03-01 10:31:51
【问题描述】:

当我尝试通过 SQL Developer 或我的 java 应用程序连接到 oracle 时,出现以下错误,但我能够连接 来自 SQL PLUS(命令行工具)

    Listener refused the connection with the following error :

    ORA-12505, TNS:listener does not currently know 
    of SID given in connect descriptor

每当我重新启动系统时,我都会遇到这个问题。虽然系统重新启动后 10 次中有 1 次,但我能够成功连接。

我可以看到所有的 oracle 服务,包括 OracleOraDb11g_home1TNSListener 都在服务部分。仅供参考 我的 SID 名称是 orcl

通过卢克回答后ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 看起来在重启时 oracle 数据库比 OracleOraDb11g_home1TNSListener 更早启动。所以它不能 向听众注册。

我认为解决方案应该是先创建监听器然后启动数据库。 如何配置重启后一段时间后启动数据库?

【问题讨论】:

  • 数据库应该定期尝试注册;如果数据库首先启动,我希望它会在听众出现后大约一分钟内做到这一点。它最终是否会出现,或者如果您明确地将alter system register 作为 SQL*Plus 中的 SYS 执行?如果不是,您的 IP 地址是否会在重新启动时更改,是否设置了 local_listener init 参数? (呃,除了听者在另一个评论的本地主机上,所以它可能不是 IP 问题......)
  • 几乎每次我重新启动系统时都会发生这种情况。另外,我没有使用listener显式注册数据库(它应该在重新启动时自动发生。是的,有时会发生,但有时不会)。我将“lsnrctl status”的结果粘贴在 cmets ofLalit 答案下。你能从中看出点什么来吗?
  • 你问“你的 IP 地址在重启时会改变吗?”可能是。但它如何影响?您还问“是否设置了 local_listener 初始化参数?”我不知道在哪里检查这个以及它的重要性是什么?
  • @emily - 这可能没关系,因为您的听众在本地主机上。 show parameters listener 会告诉您是否已设置,但必须存在差异和一些奇怪的东西才重要。如果未设置,则默认为 localhost:1521,这就是您的监听器所在的位置。

标签: java oracle


【解决方案1】:

每当我重新启动系统时,我都会遇到这个问题。虽然系统重新启动后 10 次中有 1 次,但我能够成功连接。

可能的原因是系统重启后SERVICES 没有启动。检查方式,取决于operating system

例如,在Windows OS 中,您可以转到services.msc 并查看 TNS 服务是否已启动并运行。

要检查监听器是否启动,以及数据库是否已注册,请检查lsnrctl status。另外,请记住,listener 需要在系统重新启动后的某个时间。对侦听器进行任何更改后也是如此,您必须等待一段时间。

【讨论】:

  • @ lalit kumar 正如我在我的帖子中所说的“我可以看到包括 OracleOraDb11g_home1TNSListener 在内的所有 Oracle 服务都在服务部分”。所以我认为不知何故 db 没有向侦听器注册。我确实运行了“lsnrctl status”。但是哪个参数告诉DB是否注册了监听器?
  • 发布 lsnrctl status 的结果。您是否尝试过 lsnrctl stop and start?
  • 我没有看到任何注册的服务...没有识别出任何实例。
猜你喜欢
  • 2013-02-10
  • 2021-12-30
  • 2011-08-05
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2014-06-06
  • 2015-08-31
相关资源
最近更新 更多