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

我正在使用Oracle数据库。 我用Java编写了一个小的JDBC连接程序,但是我遇到了一个监听器的问题。

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JdbcConnection { public static void main(String[] args) throws SQLException,ClassNotFoundException { String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "system"; String password = "password"; Connection connection = null; Class.forName("oracle.jdbc.driver.OracleDriver"); connection = DriverManager.getConnection(url, user, password); if(connection!=null){ System.out.println("Success in connnection"); } else { System.out.println("failure in connection "); } } } 

我收到以下exception:

 C:\Users\Administrator\Desktop>java JdbcConnection Exception in thread "main" java.sql.SQLException: Listener refused the connectio n with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:orcl at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :261) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java: 441) at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:165) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtensio n.java:35) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at JdbcConnection.main(JdbcConnection.java:18) 

这是lsnrctl status的输出

 LSNRCTL for 64-bit Windows: Version 12.1.0.1.0 - Production on 16-JUN-2015 13:43 :41 Copyright (c) 1991, 2013, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> status Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for 64-bit Windows: Version 12.1.0.1.0 - Produ ction Start Date 16-JUN-2015 12:02:52 Uptime 0 days 1 hr. 40 min. 52 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File C:\app\orauser\product\12.1.0\dbhome_1\network\admin\l istener.ora Listener Log File C:\app\orauser\diag\tnslsnr\hydwemvm\listener\alert\lo g.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hydwemvm)(PORT=1521))) Services Summary... Service "CLRExtProc" has 1 instance(s). Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully 

如果您知道您的oracle数据库SID,那么使用

 jdbc:oracle:thin:@localhost:1521:orcl 

如果您有服务名称,请在下面使用

 jdbc:oracle:thin:@localhost:1521/orcl 

此外,请确保名称为ORCL服务名称已启动并正在运行。 如果仍然无效,则需要重新启动计算机并在上面重试。

还是行不通 ? 然后,尝试以下方法:

使用SYSTEM用户登录并通过在SQL下运行注册LOCAL_LISTENER

 alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both; alter system register; 

如何检查oracle SID和服务名称:

 SELECT sys_context('USERENV', 'SID') FROM DUAL; -- It will return your oracle database SID SELECT sys_context('USERENV', 'SERVICE_NAME') FROM DUAL; -- It will return your oracle database service name 

如果您想知道数据库的默认SID,请在sqlplus中使用此查询:

 SELECT sys_context('USERENV', 'SID') FROM DUAL; 

在JDBC URL中使用此值而不是“orcl”。

你能使用以下url吗?
注意区别,这是使用SERVICENAME而不是SID。

 jdbc:oracle:thin:@localhost:1521/orclservice