Oracle ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID

Oracle ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID,oracle,jdbc,Oracle,Jdbc,我已在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

我已在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
java.sql.SQLException:侦听器拒绝连接,出现以下错误:
ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:531)
位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:221)
位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
在com.jlcindia.jdbc.jdbcuti.geOracleConnection(jdbcuti.java:28)上
位于Lab3O.main(Lab3O.java:15)
原因:oracle.net.ns.NetException:侦听器拒绝连接,出现以下错误:
ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID
位于oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
位于oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
... 8个以上

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

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

  • 数据库尚未启动

  • 数据库尚未向侦听器注册,例如,因为数据库是在侦听器启动之前启动的。(当数据库启动时,如果它已经在运行,则向侦听器注册自身。如果侦听器没有运行,则数据库不会注册自身,如果侦听器启动,则不会查找可能向其注册的数据库。)
ORA-12505意味着侦听器知道该数据库,但侦听器尚未收到来自该数据库的数据库已启动的通知。(如果您试图使用错误的SID连接到错误的数据库,则会出现ORA-12154错误“TNS:无法解析指定的连接标识符”。)

服务管理单元中正在运行哪些Oracle服务?(从“控制面板”>“管理工具”>“服务”打开此文件,或只需启动”>“运行>
Services.msc
)您需要运行服务OracleServiceXE和OracleXETNSListener

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


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

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


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

我也面临同样的问题。我使用VMware在Windows XP操作系统中安装了Oracle Express edition 10g,它运行良好。由于在10g提供的SQL实用程序中键入SQL查询非常困难,而且我习惯于使用SQL developer,因此我在XP中安装了32位SQL developer,并尝试连接到我的DB SID“XE”。但是连接失败,错误为-ORA-12505 TNS listener当前不知道连接描述符中给出的SID。我不知道这个问题是如何发生的,因为它与SQL实用程序配合得很好,而且我还使用相同的工具创建了一些Informatica映射。我在这里浏览了很多这方面的内容,并在公共论坛上ping了“lsnrctl”的状态后应用了提供给我的建议,但没有任何效果。然而,今天早上我又试着创建一个新的连接,瞧,它没有任何问题。在读了几篇文章后,我猜测有时候监听器会在DB连接或其他东西之前侦听(请原谅我的粗俗引用,因为我是这里的新手),但我建议重新启动机器并再次检查。

我也遇到了同样的错误,但当尝试时,这三个错误都失败了。 如果以上三种方法都失败,请尝试LSNRCTL status,如果您发现服务(在我的例子中是XE)缺失,请尝试此方法

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

这可能会起作用……

我最初来这里时遇到了同样的问题。我已经在Windows8(64位)上安装了JU的Oracle12c,但后来我通过命令行上的“tnspingXe”解决了这个问题。。。如果未建立连接或未找到名称,请尝试使用数据库名称,在我的示例中是'orcl'…'TNSPING orcl'再次,如果ping成功,那么在这种情况下,您需要将SID更改为'orcl'。

我通过更正jdbc字符串修复了此问题

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

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");
jdbc:oracle:thin:@myserver:1521/XE
但是我使用的jdbs字符串是

jdbc:oracle:thin:@myserver:1521:XE
sqlplus system/system-password@XE
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
conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");
conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
 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)
`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`
 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.
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