TNS-12505:TNS:侦听器当前不知道连接描述符中给出的SID

我正尝试使用以下连接string从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服务输出

 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连接正常。

有这个错误的解决办法吗?

您需要添加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。

这工作对我来说 – 我做了以上所有改变:

 jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521:xe 

至:

 jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521/xe 

步骤1 – 检查DB监听器状态

  lsnrctl status 

注意你想要的监听器(在我们的例子中是“orcl”)没有显示。

第2步 – 通过sqlpluslogin

  sqlplus sys/oracle as sysdba 

sqlplus给了我们这个错误信息:

  Writing audit records to Windows Event Log failed 

第3步 – 进入Windows事件查看器(eventvwr.exe)

在“Windows日志”下,右键单击应用程序,然后select“清除日志”。 对系统做同样的事情。

右键单击“应用程序”并select“属性”也是明智之举。 然后,在“日志大小”下,select“当达到最大日志大小时”下的以下选项:“根据需要覆盖事件”。 这应该防止日志超出并导致数据库不能启动。

在Windows Vista和更高版本中,可以执行以下命令来清除应用程序日志:

  wevtutil cl Application 

第4步 – 通过sqlpluslogin

  sqlplus sys/oracle as sysdba 

您现在应该能够login,没有错误消息。

第5步 – 检查DB监听器状态

  lsnrctl status 

你现在应该看到你的监听器正在运行。

第6步 – 启动UCM

UCM现在应该启动。

为了更深入的回答这个问题,你可以阅读我的完整博客文章 。

在更换防火墙后,我遇到了这个问题,以限制内部networking和数据库服务器之间的访问,报告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_zelfbuild议的“更改系统寄存器”的缘故。 我确实已经在listener.ora和tnsnames.ora的相关位置设置了IP。

正如去掉冒号所提到的那样:在sid为我工作之前用斜杠replace。

我也有过这个问题。

我在Windows 8上运行Oracle xpress版本11.2,当使用sqldeveloper尝试连接到数据库时出现同样的错误。

我已经根据上面的Brandt回答编辑了listener.ora,甚至重新启动了我的机器,问题没有解决。

我做了以下事情:去控制面板 – >pipe理工具 – >服务,你会发现一个名为“OracleServiceXE”的服务不运行。

我开始了,并试图再次连接,问题解决。

在oracle虚拟机中更改了ip之后,侦听器再也没有工作。 最后这些命令解决了这个问题(其中192.168.10.200是新的ip)

[oracle @ oracle admin] $ sqlplus / as sysdba

SQL * Plus:版本11.2.0.1.0生产5月10日星期二12:57:37 2016

版权所有(c)1982年,2009年,Oracle。 版权所有。

连接到:Oracle数据库11g企业版版本11.2.0.1.0 – 使用分区,OLAP,数据挖掘和实际应用testing选项的64位生产

SQL> alter system set local_listener ='(ADDRESS =(PROTOCOL = tcp)(HOST = 192.168.10.200)(PORT = 1521))'scope = both;

系统改变了。

SQL> alter system register;

系统改变了。

SQL>退出

我在Windows 7上遇到了同样的问题。原因是,我使用Cisco AnyConnect安全移动客户端连接到了VPN。

您的数据库,显然有ORACLE_SID XE,没有在listener.ora中定义。 这是没有问题的,因为当数据库正常打开时,它将自己注册到默认侦听器,即端口1521上的那个,这样就可以了。

  1. 数据库是否打开?
  2. 监听器/数据库的启动顺序是什么?
  3. 是持久性的错误?

如果数据库在侦听器之前启动,则数据库没有侦听器来注册。 它会每隔几分钟就这样做一次,所以我预计这个错误会因为注册已经发生而消失。 你可以发出alter system register; 加快这一点。 如果数据库处于受限模式,则使用服务的连接将失败。 你正在使用ORACLE_SID,所以这不是你的问题。

同时检查正在使用的名称。 本地主机是否parsing为与Brodyaga-PC相同的地址? 在jdbcstring中,您使用本地主机,而侦听器则会侦听Brodyaga-PC。 是localhost 127.0.0.1吗?

启动OracleServiceHari,其中'HARI'是SID,为我工作。

其他面临同样问题的人可能会检查服务的状态。

检查 – 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,我能够创build连接使用“orcl”实例 – 所以我用端口1522和实例作为“orcl” – 现在URL是 –

 DriverManager.getConnection("jdbc:oracle:thin:@localhost:1522:orcl", "SYS as SYSDBA","password"); 

它为我工作所以请检查LSNRCTL>统计在命令提示符下,并相应地configuration您的连接URL。
希望它会帮助某人。

只是为了另一种可能性检查,我想出了与连接URL中指定的不正确的端口号完全相同的问题。 我创build了一个新的oracle11g实例,并忘记杀死占用相同端口1521的前一个实例,因此新实例自动从端口1522开始。编辑端口号解决了我的问题。

刚刚安装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))) 

OK(30毫秒)

 C:\> 

正如你所看到的那样,解决这个问题需要很长时间,所以我给主机文件添加了一个条目,如下所示:

 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:\> 

随着时间的反应从根本上减less,我试着成功地在sqldeveloper上进行连接。

连接成功

这对我来说就像一个魔术。

我login到数据库并注册了监听器。

 alter system set local_listener='(...)'; alter system register;