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