TNS-12505:TNS:listener 目前不知道连接描述符中给出的 SID
Posted
技术标签:
【中文标题】TNS-12505:TNS:listener 目前不知道连接描述符中给出的 SID【英文标题】:TNS-12505: TNS:listener does not currently know of SID given in connect descriptor 【发布时间】:2011-08-05 10:03:39 【问题描述】:我正在尝试使用以下连接字符串从 NetBeans 连接到 Oracle 10.2.0:
jdbc:oracle:thin:@localhost:1521:XE
最奇怪的部分是一切正常,直到重新启动。我开始一直收到这个 TNS-12505 错误;查看我的listener.log
中的最终条目:
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-APR-2011 13:46:48
Copyright (c) 1991, 2005, Oracle. All rights reserved.
System parameter file is D:\oraclexe\app\oracle\product\10.2.0\server\network\admin\listener.ora
Log messages written to D:\oraclexe\app\oracle\product\10.2.0\server\network\log\listener.log
Trace information written to D:\oraclexe\app\oracle\product\10.2.0\server\network\trace\listener.trc
Trace level is currently 0
Started with pid=3460
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC_FOR_XEipc)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Brodyaga-PC)(PORT=1521)))
Listener completed notification to CRS on start
TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE
14-APR-2011 13:48:54 * (CONNECT_DATA=(SID=XE)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=Brodyaga))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=58458)) * establish * XE * 12505
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
14-APR-2011 13:49:00 * (CONNECT_DATA=(SID=XE)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=Brodyaga))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=58481)) * establish * XE * 12505
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
14-APR-2011 13:49:02 * (CONNECT_DATA=(SID=XE)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=Brodyaga))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=58487)) * establish * XE * 12505
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
14-APR-2011 13:50:23 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Brodyaga))(COMMAND=services)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=169869568)) * services * 0
前三个条目是我从 NetBeans 连接的尝试。第四个,通过 SQL*Plus 的连接,工作正常。
这是我的listener.ora
的内容:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = Brodyaga-PC)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
还有tnsnames.ora
:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Brodyaga-PC)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
以及来自 > lsnrctl services
的输出C:\Users\Brodyaga>lsnrctl services
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 14-APR-2011 13:59
:45
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
The command completed successfully
两个 Oracle 服务都已启动并且 SQL*Plus 连接正常。
这个错误有什么解决方法吗?
【问题讨论】:
在数据库中发出ALTER SYSTEM REGISTER
有什么不同吗?如果不是,你可以明确地将 XE 添加到 SID_LIST
我猜。是否设置了LOCAL_LISTENER
init 参数? SQL*Plus 与 NetBeans 的连接方式有所不同,但您可以尝试通过在环境中设置 TWO_TASK=XE
来模仿它 - 但不要认为这会告诉您太多。
对于遇到此问题的任何人,如果您尝试在使用与 Windows 中的 Oracle 服务相同的端口的 VirtualBox 上运行 Oracle,您将遇到此错误。
【参考方案1】:
您需要添加 XE 的 SID 条目以便向侦听器注册实例。
安装 Oracle XE 后,一切看起来都很好,但是当你发出
C:\>sqlplus / as sysdba
SQL>shutdown immediate
SQL>startup
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
实例不会向侦听器注册。
所以请像这样编辑你的 listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
)
当我在 Windows 7 上安装 Oracle XE 时出现了这个问题。我在 Windows XP 上没有遇到这个问题。通常,此条目不是必需的,因为实例应该自动向侦听器注册。在 Linux (Fedora) 上运行 Oracle XE,无需将 XE 添加到 sid-list。
【讨论】:
这解决了我在 Windows 7 上的问题 - Oracle XE 11.2 - 工作了几个月,然后在升级 cisco anyconnect *** 软件后出现。不确定 *** 软件是否相关,但在此之后才观察到问题。 这在 CentOS 6.7 虚拟机上对我有用。我的数据库工作了一段时间,然后 IP 地址发生了变化,我在 listener.ora 和 tnsnames.ora 中对其进行了更改,并且还必须添加 SID_DESC=XE 条目。XE
确实从我的 listener.ora 文件中丢失。 这只有在我重新启动监听器后才有效(以管理员身份打开 cmd -> lsnrctl stop
-> lsnrctl start
-> lsnrctl reload
)。在我这样做之后它起作用了,非常感谢!
listener.ora 在哪里??
@PhilipRego 当您执行lsnrctl status
(可能需要管理员权限)时,您会得到如下信息: 监听器的参数文件 C:\Program Files\oraclexe\product\12.2.0\ dbhome\network\admin\listener.ora(你的评论很老了,但也许其他人也可能需要这个信息)【参考方案2】:
这对我有用 - 我做了以上所有然后改变了:
jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521:xe
到:
jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521/xe
【讨论】:
太棒了!只是在连接 URL 中将 : 更改为 / 为我工作 用“/”改变“:”可能是巧合,这个符号意味着不同的东西(:NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
【参考方案3】:
在我们的 oracle 虚拟机中更改 ip 后,监听器不再工作。最后这些命令解决了问题(其中 192.168.10.200 是新 ip)
[oracle@oracle admin]$ sqlplus / as sysdba
SQL*Plus:2016 年 5 月 10 日星期二 12:57:37 发布 11.2.0.1.0 生产版
版权所有 (c) 1982、2009、甲骨文。保留所有权利。
连接到: Oracle Database 11g 企业版 11.2.0.1.0 - 64 位生产 具有分区、OLAP、数据挖掘和实际应用程序测试选项
SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.10.200)(PORT=1521))' scope=both;
系统已更改。
SQL> 改变系统寄存器;
系统已更改。
SQL> 退出
【讨论】:
我不知道为什么这会奏效,但值得称赞。每次我得到一台新笔记本电脑时,我在过去两年中的第四台笔记本电脑上都会遇到同样的问题。每次我发誓我都会使用一种新方法来解决这个问题。今天我使用了你发布的内容。不知道为什么它会起作用,但很高兴能够恢复运行。好吧,直到我关闭计算机并重新打开。这就是总是发生的事情......只是没有“保持”工作。我真的希望有一个很好的干净答案来解释为什么我在每次安装 Oracle Express 时都会遇到这个问题。【参考方案4】:在更改防火墙以限制我们的内部网络与报告位于 DMZ 中的错误的数据库服务器之间的访问后,我遇到了这个问题。在更改之前,通信工作正常,系统和数据库重新启动无济于事。就我而言,两个 Oracle XE11gR2 安装都在 Windows 上。
经过一天的努力,我找到了http://edstevensdba.wordpress.com/2011/07/30/exploring-the-local_listener-parameter/,并通过以下方式解决了问题:
alter system set local_listener='(ADDRESS=(PROTOCOL=tcp)(HOST=[my server's ip])(PORT=1521))' scope=both;
alter system register;
这可能仅仅是因为 ik_zelf 建议的“更改系统寄存器”。我确实已经在 listener.ora 和 tnsnames.ora 的相关位置设置了 IP。
【讨论】:
【参考方案5】:第 1 步 - 检查 DB 侦听器状态
lsnrctl status
请注意,您想要的监听器(在我们的例子中是“orcl”)没有显示。
第 2 步 – 通过 sqlplus 登录
sqlplus sys/oracle as sysdba
Sqlplus 给了我们这个错误信息:
Writing audit records to Windows Event Log failed
第 3 步 - 进入 Windows 事件查看器 (eventvwr.exe)
在“Windows 日志”下,右键单击应用程序并选择“清除日志”。对 System 执行相同操作。
右键单击应用程序并选择属性也可能是明智的。然后,在“日志大小”下,在“达到最大日志大小时”下选择以下选项:“根据需要覆盖事件”。这应该可以防止日志最大化并导致数据库无法启动。
在 Windows Vista 及更高版本中,您可以执行以下命令来清除应用程序日志:
wevtutil cl Application
第 4 步 – 通过 sqlplus 登录
sqlplus sys/oracle as sysdba
您现在应该能够在没有错误消息的情况下登录。
第 5 步 - 检查 DB 侦听器状态
lsnrctl status
您现在应该看到您的侦听器正在运行。
第 6 步 - 启动 UCM
UCM 现在应该启动了。
要更深入地回答这个问题,您可以阅读我的完整版blog post。
【讨论】:
【参考方案6】:我在 Windows 8 上运行 oracle xpress edition 11.2,在尝试使用 sqldeveloper 连接到数据库时遇到了同样的错误。
我已经按照上面 Brandt 的回答编辑了 listener.ora,甚至重新启动了我的机器,但问题没有得到解决。
我做了以下事情: 转到控制面板->管理工具->服务 你会发现一个名为“OracleServiceXE”的服务没有运行。
我启动它并尝试再次连接,问题已解决。
【讨论】:
【参考方案7】:如前所述,在 sid 为我工作之前,删除冒号 :
并用斜杠替换 /
。
我以前也遇到过这个问题。
【讨论】:
是的,添加 /(斜杠)而不是 :(冒号)就像魅力一样工作 但在此之后它说无效的连接 URL。请检查我的问题***.com/q/45284753/6303688【参考方案8】:我在 Windows 7 上遇到了同样的问题。原因是我使用 Cisco AnyConnect 安全移动客户端连接到 ***。
【讨论】:
【参考方案9】:检查 - LSNRCTL> 统计数据 我得到了这样的结果 -
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1522)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
Start Date 17-APR-2016 10:12:38
Uptime 0 days 10 hr. 6 min. 16 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File
C:\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File c:\app\admin\diag\tnslsnr\admin-PC\listener\alert\log.xml Listening
Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1522ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1522)))
Services Summary... Service "CLRExtProc" has 1 instance(s). Instance
"CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully.
根据以上详细信息-我的端口号是-1522,我可以使用“orcl”实例创建连接- 所以我使用端口作为 1522 和实例作为“orcl” - 现在 URL 是 -
DriverManager.getConnection("jdbc:oracle:thin:@localhost:1522:orcl", "SYS as SYSDBA","password");
它对我有用所以请在命令提示符中检查 LSNRCTL> stat 并相应地配置您的连接 URL。 希望对某人有所帮助。
【讨论】:
【参考方案10】:您的数据库显然具有 ORACLE_SID XE,但未在 listener.ora 中定义。没问题,因为当数据库正常打开时,它会将自己注册到默认监听器,即1521端口上的监听器,这样就可以了。
-
数据库是否打开?
监听器/数据库的启动顺序是什么?
错误是否持续存在?
如果数据库在侦听器之前启动,则数据库没有要注册的侦听器。它每隔几分钟就会这样做,所以过了一会儿,我希望错误会因为注册已经发生而消失。您可以发出alter system register;
来加快速度。
如果数据库处于受限模式,则使用服务的连接将失败。您正在使用 ORACLE_SID,所以这不是您的问题。
还要检查正在使用的名称。 localhost 是否解析到与 Brodyaga-PC 相同的地址?在 jdbc 字符串中,您使用 localhost 并且侦听器侦听 om Brodyaga-PC。本地主机是 127.0.0.1 吗?
【讨论】:
【参考方案11】:在“HARI”是 SID 的地方启动 OracleServiceHari,对我有用。
其他面临同样问题的人可以检查服务的状态。
【讨论】:
【参考方案12】:就我而言,我只是在 Windows 10 中完成了以下步骤。
-
转到控制面板
点击管理
点击服务
找到
OracelServeceXE
、OracleXEClrAgeng
、OracleXETNSListener
右击并按Start
/Restart
完成进程后。检查它会工作还是会工作;)
完成
一切顺利。
【讨论】:
【参考方案13】:只是为了检查另一种可能性,我提出了完全相同的问题,即连接 URL 中指定的端口号不正确。我创建了一个新的 oracle11g 实例,忘记杀死占用相同端口 1521 的前一个实例,因此新实例自动在端口 1522 上启动。编辑端口号解决了我的问题。
【讨论】:
【参考方案14】:在安装 Oracle XE 11.2 后,我也遇到了同样的问题。在阅读并咨询了一位 DBA 朋友后,我运行了以下命令:
C:\>tnsping xe
TNS Ping Utility for 64-bit Windows: Version 11.2.0.2.0 - Production on 11-ENE-2017 14:27:44
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myLaptop)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE)))
正常(30 毫秒)
C:\>
如您所见,解决需要很长时间,因此我在hosts文件中添加了一个条目,如下所示:
127.0.0.1 localhost
完成后,再次运行相同的命令:
C:\>tnsping xe
TNS Ping Utility for 64-bit Windows: Version 11.2.0.2.0 - Production on 11-ENE-2
017 14:40:29
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
C:\oraclexe\app\oracle\product\11.2.0\server\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myLaptop)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SER
VICE_NAME = XE)))
OK (30 msec)
C:\>
随着时间响应的急剧减少,我在 sqldeveloper 上尝试连接成功。
【讨论】:
【参考方案15】:在 Windows 中的搜索选项中转到管理工具>组件服务>OracleServiceXE(启动此服务)
【讨论】:
【参考方案16】:转到任务管理器并检查以下服务是否正在运行(如果没有启动服务):
OracleXETNSListener
OracleXEClrAgent
OracleServiceXE
【讨论】:
【参考方案17】:这对我来说就像魔术一样。
我登录数据库并注册了监听器。
alter system set local_listener='(...)';
alter system register;
【讨论】:
以上是关于TNS-12505:TNS:listener 目前不知道连接描述符中给出的 SID的主要内容,如果未能解决你的问题,请参考以下文章
TNS-12505: TNS:listener does not currently know of SID given in connect descriptor
java.sql.SQLException: TNS:listener 目前不知道连接描述符中给出的 SID
ORA-12514: TNS:listener 当前不知道连接描述符中请求的服务
Oracle TNS Listener Remote Poisoning
ORA-12528: TNS:listener: all appropriate instances are blocking new connections