57

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

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

4

17 回答 17

78

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

于 2012-05-31T19:38:10.757 回答
52

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

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

至:

jdbc.databaseurl=jdbc:oracle:thin:@localhost:1521/xe
于 2012-11-06T23:13:39.887 回答
5

After a change of ip in our oracle virtual machine, the listener never worked again. Finally these command solved the problem (where 192.168.10.200 is the new ip)

[oracle@oracle admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Tue May 10 12:57:37 2016

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options

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

System altered.

SQL> alter system register;

System altered.

SQL> exit

于 2016-05-10T03:57:17.597 回答
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。

于 2013-11-06T09:59:21.937 回答
3

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

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

我已经完成了以下操作:转到控制面板 -> 管理工具 -> 服务,您会发现名为“OracleServiceXE”的服务未运行。

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

于 2014-11-12T10:24:38.803 回答
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 日志”下,右键单击应用程序并选择“清除日志”。对系统执行相同的操作。

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

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

   wevtutil cl Application

第 4 步 – 通过 sqlplus 登录

   sqlplus sys/oracle as sysdba

您现在应该能够在没有错误消息的情况下登录。

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

   lsnrctl status

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

第 6 步 – 启动 UCM

UCM 现在应该启动。

要更深入地回答这个问题,您可以阅读我的完整博客文章

于 2013-03-18T20:45:27.133 回答
2

正如在 sid 为我工作之前删除冒号:并用斜杠替换所提到的。/

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

于 2014-11-06T19:23:36.787 回答
2

检查 - LSNRCTL> stat 我得到的结果如下 -

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。
希望它会帮助某人。

于 2016-04-17T18:47:22.470 回答
2

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

于 2016-07-14T09:51:45.127 回答
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 吗?

于 2011-04-14T10:58:44.357 回答
1

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

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

于 2015-06-17T16:07:55.330 回答
1

就我而言,我只是在 Windows 10 中完成了以下步骤。

  1. 转到控制面板
  2. 点击管理
  3. 点击服务
  4. 找到OracelServeceXE, OracleXEClrAgeng,OracleXETNSListener
  5. 右键单击并按Start/Restart
  6. 完成过程后。检查它会工作还是会工作;)
  7. 完毕
  8. 一切顺利。
于 2018-06-02T17:12:37.680 回答
0

只是为了检查另一种可能性,我提出了完全相同的问题,即连接 URL 中指定的端口号不正确。我创建了一个新的 oracle11g 实例,忘记杀死占用相同端口 1521 的前一个实例,所以新实例自动在端口 1522 上启动。编辑端口号解决了我的问题。

于 2014-08-13T02:01:21.380 回答
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 上的连接。

连接成功

于 2017-01-11T20:59:41.120 回答
0

在 Windows 中的搜索选项中转到管理工具>组件服务> OracleServiceXE(启动此服务)

于 2018-02-16T06:31:56.343 回答
0

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

OracleXETNSListener

OracleXEClrAgent

OracleServiceXE
于 2018-05-18T18:42:31.333 回答
-1

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

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

alter system set local_listener='(...)';
alter system register;
于 2014-09-08T10:07:03.370 回答