【发布时间】: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_listenerinit 参数? (呃,除了听者在另一个评论的本地主机上,所以它可能不是 IP 问题......) -
几乎每次我重新启动系统时都会发生这种情况。另外,我没有使用listener显式注册数据库(它应该在重新启动时自动发生。是的,有时会发生,但有时不会)。我将“lsnrctl status”的结果粘贴在 cmets ofLalit 答案下。你能从中看出点什么来吗?
-
你问“你的 IP 地址在重启时会改变吗?”可能是。但它如何影响?您还问“是否设置了 local_listener 初始化参数?”我不知道在哪里检查这个以及它的重要性是什么?
-
@emily - 这可能没关系,因为您的听众在本地主机上。
show parameters listener会告诉您是否已设置,但必须存在差异和一些奇怪的东西才重要。如果未设置,则默认为 localhost:1521,这就是您的监听器所在的位置。