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

Ant*_*ton 53 oracle tnsnames jdbc listener

我正在尝试使用以下连接字符串从NetBeans连接到Oracle 10.2.0:

jdbc:oracle:thin:@localhost:1521:XE
Run Code Online (Sandbox Code Playgroud)

最奇怪的部分是一切正常,直到重新启动之一.我一直开始得到这个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
Run Code Online (Sandbox Code Playgroud)

前三个条目是我尝试从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)
Run Code Online (Sandbox Code Playgroud)

而且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) 
    ) 
  ) 
Run Code Online (Sandbox Code Playgroud)

并输出> 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
Run Code Online (Sandbox Code Playgroud)

两个Oracle服务都已启动,SQL*Plus连接正常.

这个错误有一些解决方法吗?

Bja*_*ndt 73

您需要为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
Run Code Online (Sandbox Code Playgroud)

实例不会向监听器注册.

所以请编辑你的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)
     )
  )
Run Code Online (Sandbox Code Playgroud)

当我在Windows 7上安装Oracle XE时出现了这个问题.我在Windows XP上没遇到这个问题.通常,此条目不是必需的,因为实例应自动向侦听器注册.在Linux(Fedora)上运行Oracle XE,无需将XE添加到sid-list.

  • 我的listener.ora文件确实遗漏了`XE`.**这只是在我重新启动监听器**之后才开始工作(打开cmd作为管理员 - >`lsnrctl stop` - >`lsnrctl start` - >`lsnrctl reload`).在我这样做之后它起作用了,非常感谢! (7认同)
  • 这解决了我在Windows 7上的问题 - Oracle XE 11.2 - 在cisco anyconnect VPN软件升级后的几个月里工作正常.不确定vpn软件是否相关,但仅在此之后才发现问题. (4认同)

The*_*ter 46

这对我有用 - 我做了以上所有改变了:

jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521:xe
Run Code Online (Sandbox Code Playgroud)

至:

jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521/xe
Run Code Online (Sandbox Code Playgroud)

  • 将“:”更改为“/”可能是巧合,这两个符号表示不同的东西(:<SID> ,/<SERVICE_NAME>)。见 /sf/ask/3071915311/ (3认同)

小智 5

在我们的 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 数据库 11g 企业版 11.2.0.1.0 版 - 具有分区、OLAP、数据挖掘和实际应用程序测试选项的 64 位生产

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

系统变了。

SQL> 更改系统寄存器;

系统变了。

SQL> 退出

  • 我不知道为什么这行得通,但值得称赞。在过去的两年里,每次我得到一台新的笔记本电脑,我在我的第 4 台笔记本电脑上,我都会遇到同样的问题。每次我发誓我都会使用新方法解决这个问题。今天我使用了你发布的内容。不知道它为什么有效,但很高兴能够重新启动并运行。好吧,直到我关闭计算机并重新打开。这是总是发生的事情......只是不“保持”工作。我真的希望有一个很好的清晰的答案来解释为什么我在每次安装 Oracle Express 时都会遇到这个问题。 (3认同)

小智 1

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

  1. 数据库打开了吗?
  2. 监听器/数据库的启动顺序是什么?
  3. 错误是否持续存在?

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

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