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

时间:2011-04-14 10:06:13

标签: oracle jdbc listener tnsnames

我正在尝试使用以下连接字符串从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连接正常。

此错误是否有解决方法?

17 个答案:

答案 0 :(得分:72)

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

答案 1 :(得分:43)

这对我有用 - 我做了以上所有事情然后改变了:

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

为:

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

答案 2 :(得分: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建议的'alter system register'。我确实已经在listener.ora和tnsnames.ora中的相关位置设置了IP。

答案 3 :(得分:4)

在我们的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。保留所有权利。

     

连接到:   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>出口

答案 4 :(得分:3)

步骤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日志”下,右键单击“应用程序”,然后选择“清除日志”。为系统做同样的事。

右键单击“应用程序”并选择“属性”也可能是明智之举。然后,在“日志大小”下,选择“达到最大日志大小时”下的以下选项:“根据需要覆盖事件”。这样可以防止日志最大化并导致DB无法启动。

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

   wevtutil cl Application

第4步 - 通过sqlplus登录

   sqlplus sys/oracle as sysdba

您现在应该能够登录而不会收到任何错误消息。

步骤5 - 检查数据库侦听器状态

   lsnrctl status

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

第6步 - 启动UCM

UCM现在应该启动。

要更深入地回答这个问题,您可以阅读我的全文blog post

答案 5 :(得分:2)

我在Windows 8上运行oracle xpress edition 11.2,尝试使用sqldeveloper连接到数据库时遇到了同样的错误。

我按照上面的Brandt回答编辑了listener.ora,甚至重启了我的机器,问题没有解决。

我做了以下事情: 转到控制面板 - >管理工具 - >服务 你会发现一个名为“OracleServiceXE”的服务没有运行。

我启动它并尝试再次连接,问题已解决。

答案 6 :(得分:2)

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

答案 7 :(得分:2)

如上所述,删除冒号:并在sid为我工作之前用斜杠/替换。

我之前也遇到过这个问题。

答案 8 :(得分:1)

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

  1. 是数据库打开吗?
  2. 侦听器/数据库的起始顺序是什么?
  3. 是持久性错误吗?
  4. 如果数据库在侦听器之前启动,则数据库没有要注册的侦听器。它会每隔几分钟就这样做,所以过了一段时间,我预计错误将因为注册已经发生而消失。您可以发出alter system register;来加快速度。 如果数据库处于受限模式,则使用服务的连接将失败。您正在使用ORACLE_SID,这不是您的问题。

    同时检查使用中的名称。 localhost是否解析为与Brodyaga-PC相同的地址?在jdbc字符串中,您使用localhost,侦听器侦听Brodyaga-PC。是localhost 127.0.0.1吗?

答案 9 :(得分:1)

启动OracleServiceHari,其中'HARI'是SID,对我有用。

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

答案 10 :(得分:1)

检查 - LSNRCTL> STAT 我的结果像 -

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

从上面的详细信息 - 我的端口号是 - 1522我可以使用" orcl"创建连接。实例 - 所以我使用port作为1522,实例作为" orcl" - 现在网址是 -

10 times

对我有用所以请检查 LSNRCTL>在命令提示符下显示并相应地配置您的连接URL 希望它会对某人有所帮助。

答案 11 :(得分:1)

就我而言,我刚刚在Windows 10中执行了以下步骤。

  1. 转到控制面板
  2. 点击管理
  3. 点击服务
  4. 找到OracelServeceXEOracleXEClrAgengOracleXETNSListener
  5. 右键单击并按Start / Restart
  6. 完成流程后。检查它是否有效或可行;)
  7. 完成
  8. All the Best。

答案 12 :(得分:0)

只是为了检查另一种可能性,我在连接URL中指定了错误的端口号时遇到了完全相同的问题。我创建了一个新的oracle11g实例并忘记杀死占用同一端口1521的前一个实例,因此新实例自动在端口1522上启动。编辑端口号解决了我的问题。

答案 13 :(得分:0)

我在安装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上成功尝试了连接。

connection succed

答案 14 :(得分:0)

在搜索选项的Windows中

转到管理工具>组件服务> OracleServiceXE (启动此服务)

答案 15 :(得分:0)

转到任务管理器并检查以下服务是否正在运行(如果没有启动服务):

OracleXETNSListener

OracleXEClrAgent

OracleServiceXE

答案 16 :(得分:-1)

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

我登录数据库并注册了监听器。

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