189

我在我的 windows 7 64 位操作系统中安装了 Oracle 11g Express Edition Release 2 并尝试执行 JDBC 程序,然后出现以下错误:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more
4

29 回答 29

242

我通过更正我的 jdbc 字符串解决了这个问题。

例如,正确的 jdbc 字符串应该是...

jdbc:oracle:thin:@myserver:1521/XE

但是我使用的 jdbs 字符串是......

jdbc:oracle:thin:@myserver:1521:XE

(注意:1521和之间XE应该是 a /

这个糟糕的 jdbc 字符串也给了我一个 ORA-12505 错误。

于 2013-12-11T00:48:12.703 回答
105

有几件事可能会导致此问题,但在开始使用 JDBC 之前,您需要确保可以使用 SQL*Plus 连接到数据库。如果您不熟悉 SQL*Plus,它是一个用于连接 Oracle 数据库的命令行工具,长期以来一直是 Oracle 的标准部分,并且包含在 Oracle XE 中。

使用 JDBC 连接到 Oracle 数据库时,您不会直接连接到数据库。相反,您连接到 TNS 侦听器,然后它将您连接到数据库。该错误ORA-12505意味着侦听器已启动并且您可以连接到它,但它无法将您连接到数据库,因为它不知道该数据库已启动。有两个原因:

  • 数据库尚未启动,
  • 数据库尚未向侦听器注册,例如因为数据库在侦听器之前启动。(当数据库启动时,如果它已经在运行,它会向侦听器注册自己。如果侦听器没有运行,数据库不会注册自己,如果侦听器启动,它不会去寻找可能注册它。)

ORA-12505 意味着侦听器知道该数据库,但侦听器尚未收到来自数据库的数据库已启动的通知。(如果您尝试使用错误的 SID 连接到错误的数据库,则会收到 ORA-12154 错误“TNS:无法解析指定的连接标识符”。)

服务管理单元中正在运行哪些 Oracle 服务?(从“控制面板”>“管理工具”>“服务”或“开始”>“运行”> 中打开它services.msc。)您需要运行 OracleServiceXE 和 OracleXETNSListener 服务。

如果两个服务都已启动,您是否可以在命令提示符下使用以下任一命令连接到 SQL*Plus 中的数据库?(我假设您在安装了 Oracle XE 的机器上运行这些。)

sqlplus 系统/系统密码@XE
sqlplus 系统/系统密码
sqlplus / 作为 sysdba

(替换system-password为您在 Oracle XE 安装期间为 SYS 和 SYSTEM 用户设置的密码。)

这三个中的第一个通过 TNS 侦听器连接,但后两个不通过侦听器直接连接到数据库,并且仅当您与数据库位于同一台计算机上时才有效。如果第一个失败但其他两个成功,则 JDBC 连接也将失败。如果是这样,请使用其他两个连接到数据库并运行ALTER SYSTEM REGISTER. 然后退出 SQL*Plus 并再次尝试第一个表单。

如果第三个失败但第二个有效,请将您的用户帐户添加到 ora_dba 组。在控制面板 > 计算机管理 > 本地用户和组中执行此操作。

一旦您可以获得表格的连接

sqlplus 系统/系统密码@XE

要工作,您应该能够通过 JDBC 连接到 Oracle XE。(顺便说一句,您没有向我们展示您用于连接数据库的 JDBC 代码,但我怀疑它很可能是正确的;如果连接字符串的某些部分错误,将会出现各种其他错误。)

于 2013-08-12T21:19:50.127 回答
65

我也遇到了同样的错误,但是当尝试所有三个都失败了。如果以上三个都失败了。如果您发现服务(在我的情况下为 XE)丢失,请尝试 LSNRCTL 状态尝试此

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

现在你可以看到服务
即使看不到试试这个

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

这应该可以工作......

于 2013-10-28T08:41:34.973 回答
33

当您收到此错误“ORA-12505,TNS:listener 目前不知道连接描述符中给出的 SID”时

解决方案:打开服务,启动OracleServiceXE,然后尝试连接...

于 2013-10-21T06:35:25.933 回答
16

如果您在 Oracle SQL Developer 中有一个工作连接,请使用连接菜单上的信息来构建您的 url,如下图所述:

在此处输入图像描述

在上面的示例中,url 将是: jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

请注意,如果您使用的是 SID,则主机名后有一个冒号 (":") 而不是斜杠 ("/")。

于 2020-04-09T21:00:19.283 回答
10

我发现了这个异常的一些原因。它们是

1)默认数据库XE的名称。所以url将是“ jdbc:oracle:thin:@localhost:1521:XE ”。

2) 确保 OracleServiceXE、OracleXETNSListener 正在运行。它将在控制面板\所有控制面板项\管理工具\服务中

于 2014-08-06T11:58:59.833 回答
8

我通过更正我的 JDBC 代码解决了这个问题。

正确的 JDBC 字符串应该是...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

但是我使用的 JDBC 字符串是......

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

因此,指定 orcl 而不是 xe 的错误显示了此错误,因为 SID 名称错误。

于 2014-09-11T11:43:17.877 回答
8

当我使用以下代码时,我的问题得到了解决:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
于 2015-07-09T06:44:36.950 回答
8

面对类似的错误,上述任何解决方案都没有帮助。listner.ora 文件中存在问题。我错误地添加SIDSID_LIST下面的内容(星号之间的部分*)。

 SID_LIST_LISTENER =
      (SID_LIST =

        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

更正此错误如下:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
     )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

停止和数据库在此处输入图像描述

手动停止侦听器 OracleServiceXE 和 OracleXETNSListener,因为它没有通过转到控制面板\所有控制面板项\管理工具\服务自动停止。重新启动数据库,它就像一个魅力。

于 2016-04-27T21:14:18.973 回答
4

我没有看到广泛讨论的一种可能性是解析主机本身的主机名可能存在问题。如果 /etc/hosts 中没有 $(hostname) 条目,则 Oracle 侦听器会混淆并且不会出现。

原来是我的问题,在 /etc/hosts 中添加主机名和 IP 地址解决了这个问题。

于 2014-04-15T18:35:26.460 回答
4

我最初是带着同样的问题来到这里的。我刚刚在 Windows 8(64 位)上安装了 Oracle 12c,但我已经通过命令行上的 'TNSPING xe' 解决了它...如果未建立连接或找不到名称,请尝试数据库名称,在我的情况下,它是'orcl'......再次'TNSPING orcl',如果它成功ping那么你需要在这种情况下将SID更改为'orcl'(或你使用的任何数据库名称)......

于 2013-11-03T00:45:36.947 回答
4

Oracle:精简式服务名称语法

只有 JDBC Thin 驱动程序支持精简样式的服务名称。语法是:

@//host_name:port_number/service_name

http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

于 2015-01-30T20:35:53.607 回答
3

我遇到了同样的问题,并通过重新启动 OracleServiceXE 服务来解决。转到 Services.msc,然后验证“OracleServiceXE”服务是否已启动并正在运行

于 2015-04-09T10:13:38.543 回答
3

我通过在我的 TNSNAMES.ora 文件中将“ SID ”更改为“ SERVICE_NAME ”解决了这个问题。

请查看您的数据库是否要求 SID 或 SERVICE_NAME。

干杯

于 2016-05-04T02:01:30.217 回答
2

我有同样的问题,所以为了解决这个问题,我首先使用重新配置我的监听器netca,然后我删除了我的旧数据库,它是 ORCL dbca,然后我再次使用创建了新数据库dbca

于 2013-12-25T15:23:42.310 回答
2

我也面临同样的问题。我已经使用 VMware 在 Windows XP 操作系统中安装了 Oracle Express 10g,它运行良好。由于在 10g 提供的 SQL 实用程序中输入 SQL 查询非常尴尬,而且由于我习惯使用 SQL 开发人员,我在 XP 中安装了 32 位 SQL 开发人员并尝试连接到我的 DB SID“XE”。但是连接失败并出现错误-ORA-12505 TNS 侦听器当前不知道连接描述符中给出的 SID。我不知道这个问题是如何发生的,因为它与 SQL 实用程序一起工作得很好,而且我还使用它创建了一些 Informatica 映射。我确实浏览了很多关于这些东西的东西,并在公共论坛上ping“lsnrctl”的状态后应用了提供给我的建议,但无济于事。然而,今天早上我再次尝试创建一个新的连接,瞧,它没有问题。我在读了几篇帖子后猜测有时听众会在数据库连接之前听或其他什么(请原谅我的粗略参考,因为我是这里的新手),但我建议重新启动机器并再次检查。

于 2013-10-22T02:42:59.297 回答
2

如果你使用 Oracle Express Edition,你应该有这个 url

jdbc:oracle:thin:@localhost:1521:xe 或 jdbc:oracle:thin:@localhost:1521/XE

我对 pom.xml 中的 liquibase 配置插件有类似的问题。我改变了我的配置:

`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`
于 2017-10-20T12:20:11.363 回答
2

请检查两者OracleServiceXEOracleXETNSListener在您浏览时启动状态start->run->services.msc

对于我的情况,仅OracleXETNSListener开始但未OracleServiceXE开始,当我开始right clicking -> start并检查连接对我有用时

于 2015-08-10T14:09:55.843 回答
2

连接 con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");

我得到的错误:

java.sql.SQLException:侦听器拒绝连接并出现以下错误:ORA-12505,TNS:侦听器当前不知道连接描述符中给出的 SID 客户端使用的连接描述符是:localhost:1521:xe

我是如何解决的:

连接 con=DriverManager.getConnection("jdbc:oracle:thin:localhost:1521:xe","scott","tiger");

(消除 @)

不知道为什么,但它现在工作......

于 2018-04-14T15:04:42.410 回答
1

通过在主机中执行 tnsping 和实例名称进行检查。它会给你 tns 的描述,并且大部分时间主机名都是不同的,这是不匹配的。

我同样解决了我的问题

在 Unix 机器上 $ tnsping (回车)

它给了我完整的 tns 描述,我发现主机名不同.. :)

于 2014-09-16T08:03:16.277 回答
1

我在 SQL Workbench 中遇到了类似的问题。

网址:

jdbc:oracle:thin:@111.111.111.111:1111: xe

不起作用。

网址:

jdbc:oracle:thin:@111.111.111.111:1111: asdb

作品。

这对我的具体情况有所帮助。我担心,这可能存在许多其他不同解决方案的原因。

于 2016-08-08T08:03:13.850 回答
1

当我尝试使用 SQL 开发人员连接到 oracle DB 时,我收到此错误ORA-12505,TNS:listener 目前不知道连接描述符中给出的 SID 。

使用的 JDBC 字符串是jdbc:oracle:thin:@myserver:1521/XE,显然是正确的一个,并且两个强制性 oracle 服务OracleServiceXE、OracleXETNSListener 已启动并运行

我解决此问题的方式(在 Windows 10 中)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.
于 2019-02-21T10:59:08.733 回答
0

有类似的问题。问题开始突然发生 - 我们有负载平衡的数据库连接 URL,但在 jdbc 连接中我直接指向单个数据库。

更改为负载平衡的 db url,它可以工作。

于 2015-06-09T16:39:59.510 回答
0

我遇到这个问题是因为我确实在任务管理器中杀死了“Oracle”任务。要修复它,您需要打开 cmd -> 键入:services.msc-> 包含所有服务的窗口将打开 -> 查找服务“ OracleServiceXE” -> 右键单击​​:开始。

于 2020-11-08T12:51:48.637 回答
0

我只是通过在服务中重新启动/启动 oracleService 来修复它

于 2019-04-16T10:04:39.750 回答
0

我的 oracle 停止工作,我收到了这个错误。我重新启动了我的机器并尝试了上述解决方案。最终,我打开了组件服务并重新启动了 oracle 服务,一切都开始工作了。希望这可以帮助某人。

于 2019-11-19T04:48:48.517 回答
0

我只是错误地创建了数据库链接。

对我来说简单的解决方法是将“SID”更改为 SERVICE_NAME

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

改变

SID=theNameOfTheDatabase

SERVICE_NAME=theNameOfTheDatabase 

解决了我的问题。

于 2020-01-24T15:02:01.720 回答
0

就我而言,没有成功,最后我重新启动了我的 oracle 和 TNS 监听器,一切正常。挣扎了2天。

于 2016-04-28T09:56:12.807 回答
0

除了运行服务(OracleServiceXE、OracleXETNSListener)之外,您的防病毒软件/防火墙仍有可能阻止它们。只要确保它们没有被阻止。在此处输入图像描述

于 2019-03-17T06:13:40.357 回答