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

| 我正在尝试使用以下连接字符串从NetBeans连接到Oracle 10.2.0:
jdbc:oracle:thin:@localhost:1521:XE
最奇怪的部分是,一切正常,直到其中一次重新启动。我一直都在收到这个TNS-12505错误;看一下我的ѭ1中的最后条目:
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
    
更改防火墙以限制内部网络与报告位于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。     
在我们的Oracle虚拟机中更改ip之后,监听器再也无法工作了。最后,这些命令解决了问题(其中192.168.10.200是新的IP)   [oracle @ oracle admin] $ sqlplus / as sysdba      SQL * Plus:11.2.0.1.0发布于2016年5月10日星期二12:57:37      版权所有(c)1982、2009,Oracle。版权所有。      连接到:   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> alter system寄存器;      系统已更改。      SQL>退出     
步骤1 –检查数据库侦听器状态
   lsnrctl status
请注意,您想要的侦听器(在我们的示例中为“ orcl”)没有显示。 步骤2 –通过sqlplus登录
   sqlplus sys/oracle as sysdba
Sqlplus给了我们这个错误信息:
   Writing audit records to Windows Event Log failed
步骤3 –进入Windows事件查看器(eventvwr.exe) 在“ Windows日志”下,右键单击“应用程序”,然后选择“清除日志”。对系统执行相同的操作。 右键单击“应用程序”并选择“属性”也是明智的。然后,在“日志大小”下,在“达到最大日志大小时”下选择以下选项:“根据需要覆盖事件”。这应防止日志用尽并导致数据库无法启动。 在Windows Vista和更高版本中,您可以执行以下命令来清除应用程序日志:
   wevtutil cl Application
步骤4 –通过sqlplus登录
   sqlplus sys/oracle as sysdba
现在,您应该能够登录而没有任何错误消息。 步骤5-检查数据库侦听器状态
   lsnrctl status
现在,您应该看到监听器正在运行。 步骤6 –启动UCM UCM现在应该启动。 有关此问题的更深入答案,请阅读我的完整博客文章。     
我在Windows 8上运行oracle xpress版本11.2,尝试使用sqldeveloper连接到数据库时遇到了相同的错误。 我已经按照上述Brandt的答案编辑了listener.ora,甚至重启了我的机器,但问题仍未解决。 我已完成以下操作: 转到控制面板->管理工具->服务 您会发现名为\“ OracleServiceXE \”的服务未运行。 我启动它并尝试再次连接,问题已解决。     
如前所述,在sid对我起作用之前,请删除冒号
:
并替换为斜线
/
。 我以前也有这个问题。     
我在Windows 7上遇到相同的问题。原因是,我已经使用Cisco AnyConnect安全移动客户端连接到VPN。     
您的数据库,显然具有ORACLE_SID XE,未在listener.ora中定义。没问题,因为数据库正常打开时,它将注册到默认侦听器,即端口1521上的侦听器,这样就可以了。 数据库是开放的吗? 侦听器/数据库的开始顺序是什么? 错误持续存在吗? 如果数据库在侦听器之前启动,则该数据库没有要注册的侦听器。它将每隔几分钟执行一次操作,因此过一会儿,我希望由于注册已发生,错误会消失。您可以发出
alter system register;
加快速度。 如果数据库处于受限模式,则使用服务的连接将失败。您正在使用ORACLE_SID,所以这不是您的问题。 还要检查使用的名称。本地主机是否解析为与Brodyaga-PC相同的地址?在jdbc字符串中,使用localhost,并且侦听器侦听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,我可以使用\“ orcl \”实例创建连接- 所以我用port作为1522,实例用\“ orcl \”-现在URL是-
DriverManager.getConnection(\"jdbc:oracle:thin:@localhost:1522:orcl\", \"SYS as SYSDBA\",\"password\");
它对我有用,因此请在命令提示符下检查LSNRCTL> stat并相应地配置您的连接URL。 希望对您有所帮助。     
就我而言,我只是在Windows 10中经历了以下步骤。 转到控制面板 点击管理 点击服务 找到
OracelServeceXE
OracleXEClrAgeng
OracleXETNSListener
右键单击并按
Start
/
Restart
完成过程后。检查它是否有效或有效;) 完成 祝一切顺利。     
为了另一种可能的检查方式,我想出了与连接URL中指定的错误端口号完全相同的问题。我创建了一个新的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:\\>
随着时间响应的减少,我在sqldeveloper上成功尝试了连接。     
在Windows中的搜索选项中,转到管理工具>组件服务> OracleServiceXE(启动此服务)     
转到任务管理器,并检查以下服务是否正在运行(如果未启动,请执行以下操作):
OracleXETNSListener

OracleXEClrAgent

OracleServiceXE
    
这对我来说就像魔术一样。 我登录数据库并注册了侦听器。
alter system set local_listener=\'(...)\';
alter system register;
    

要回复问题请先登录注册