【问题标题】:ORA-12505, TNS:listener does not currently know of SID given in connect descriptorORA-12505, TNS: 监听器当前不知道连接描述符中给出的 SID
【发布时间】:2013-08-14 02:11:05
【问题描述】:

我在 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

【问题讨论】:

  • 从对我有用的服务手动启动 OracleServiceXE。

标签: oracle jdbc


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,很有用,急需这个
    【解决方案3】:

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

    对我来说简单的解决方法是将“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 
    

    解决了我的问题。

    【讨论】:

      【解决方案4】:

      我也遇到了同样的错误,但是当尝试所有三个都失败了。 如果上述三个都失败了。如果发现服务(在我的情况下为 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
      

      这应该可以工作...

      【讨论】:

      • 你做到了,伙计!设置local_listener 后,orcl 监听器现在显示在lsnrctl 中。谢谢一百万!
      • 这让我的系统正常工作,但请注意我运行了以下命令:ALTER SYSTEM set local-listener=XE;
      • 当我输入:'alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;'它返回一个错误:ORA-65040: operation not allowed from within a pluggable database 这是什么意思?无法配置 JDBC:/
      • 两个投票最多的答案都有帮助,但这个帮助更多。看起来我没有 127.0.0.1 作为侦听器地址(我有一个带有我 PC 本地名称的地址)。所以通过添加这个新的,它开始工作了
      • alter system set local_listener = ... 为我工作。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

            当我尝试使用 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.
            

            【讨论】:

              【解决方案9】:

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

              我得到的错误:

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

              我是如何解决的:

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

              (删除@)

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

              【讨论】:

                【解决方案10】:

                如果你使用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>`
                

                【讨论】:

                  【解决方案11】:

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

                  网址:

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

                  没用。

                  网址:

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

                  有效。

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

                  【讨论】:

                    【解决方案12】:

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

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

                    干杯

                    【讨论】:

                      【解决方案13】:

                      在我的情况下没有解决,最后我重新启动了我的 oracle 和 TNS 侦听器,一切正常。挣扎了2天。

                      【讨论】:

                        【解决方案14】:

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

                         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,因为它没有通过转到控制面板\所有控制面板项\管理工具\服务自动停止。重新启动数据库,它就像一个魅力。

                        【讨论】:

                          【解决方案15】:

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

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

                          【讨论】:

                          • 我在运行 OracleServiceXE 时遇到了同样的问题。因此,重新启动 OracleServiceXE 服务对我有用。不知道为什么?!
                          • 在寻找 OracleServiceXE 时,请记住 XE 对应于数据库 SID,因此请确保您正在寻找正确的服务,OracleService[SID]
                          【解决方案16】:

                          当您浏览start-&gt;run-&gt;services.msc 时,请检查OracleServiceXEOracleXETNSListener 的状态是否已启动。

                          就我而言,只有OracleXETNSListener 启动但OracleServiceXE 没有启动,当我从right clicking -&gt; start 启动并检查连接是否对我有用时

                          【讨论】:

                            【解决方案17】:

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

                            Class.forName("oracle.jdbc.driver.OracleDriver");
                            Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
                            

                            【讨论】:

                              【解决方案18】:

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

                              更改为负载平衡的 db url 并且它起作用了。

                              【讨论】:

                              • 我们建议使用完全限定的连接字符串 URL,如下所示 jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=myhost)(PORT=1521)(PROTOCOL=tcp))(CONNECT_DATA =(SERVICE_NAME=myorcldbservicename)))
                              【解决方案19】:

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

                              【讨论】:

                                【解决方案20】:

                                甲骨文: 精简式服务名称语法

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

                                @//host_name:port_number/service_name

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

                                【讨论】:

                                  【解决方案21】:

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

                                  我同样解决了我的问题

                                  在 Unix 机器上 $ tnsping (回车)

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

                                  【讨论】:

                                    【解决方案22】:

                                    我通过更正我的 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 名称错误。

                                    【讨论】:

                                    • 就我而言,conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi"); 有效。
                                    【解决方案23】:

                                    我找到了导致此异常的一些原因。它们是

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

                                    2) 确保 OracleServiceXE、OracleXETNSListener 正在运行。它将位于 Control Panel\All Control Panel Items\Administrative Tools\Services

                                    【讨论】:

                                      【解决方案24】:

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

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

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

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

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

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

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

                                      【讨论】:

                                      • 如果你使用 / 它是一个网络服务名称,如果你使用冒号它是一个 SID。
                                      • 替换:由 / 在 Intellij 的数据库视图中为我工作,非常感谢!
                                      【解决方案25】:

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

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

                                      【讨论】:

                                        【解决方案26】:

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

                                        【讨论】:

                                          【解决方案27】:

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

                                          【讨论】:

                                            【解决方案28】:

                                            有几件事会导致此问题,但在开始使用 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 / as sysdba

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

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

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

                                            一旦你可以获得表单的连接

                                            sqlplus 系统/系统密码@XE

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

                                            【讨论】:

                                            • @Raj:我看不出你的编辑对答案有什么影响,所以我删除了它。如果您想为某个问题做出大量贡献,请发布您自己的答案,而不是编辑其他人的答案。
                                            • @LukeWoodward 我收到此错误SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. 全部 3
                                            • @qtpseleniumSupport:该消息表明您在 SQL*Plus 中并且您输入了system/ora... 行(或者 SQL*Plus 从您告诉它读取的文件中读取了该行)。我上面给出的命令行旨在从命令提示符/shell/终端窗口中使用。如果您已经在运行 SQL*Plus,请将 sqlplus 替换为 connect
                                            • "数据库未注册到监听器,例如因为数据库在监听器之前启动。" - 就是这样,谢谢!
                                            • 在 docker 上使用 OracleDB,我尝试通过 IntelliJ Data Sources and Drivers UI 连接到它。没有任何效果。阅读您的答案后,我连接到 docker 容器本身 (docker exec -it &lt;docker_id&gt; bash) 并使用了立即起作用的sqlplus / as sysdba。谢谢!
                                            【解决方案29】:

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

                                            【讨论】:

                                              猜你喜欢
                                              • 2017-05-10
                                              • 2015-08-31
                                              • 2020-03-02
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 2017-08-22
                                              相关资源
                                              最近更新 更多