2015-06-16 8 views
2

Я использую Oracle 12C в качестве моей базы данных. Я написал небольшую программу подключения JDBC в Java, но перед вами стоит проблема с слушателем.ORA-12505: прослушиватель TNS в настоящее время не знает о SID, заданном в дескрипторе соединения

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 "); 
     } 
    } 
} 

Я получаю следующее исключение:

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.<init>(PhysicalConnection.java: 
441) 
     at oracle.jdbc.driver.T4CConnection.<init>(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 
+0

Не могли бы вы показать нам код? – Kryptos

+0

Запустили ли вы службы Windows для Oracle и слушателя на вашем компьютере? –

+0

Да, службы запущены, и я также перезапускаю службы. –

ответ

10

Если вы знаете, ваш оракул базы данных SID, а затем использовать

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

прочееwi се использовать ниже в случае, если у вас есть имя службы

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

Кроме того, убедитесь, что имя службы с именем ORCL должен быть запущен. Если все еще не работает, вам необходимо перезагрузить компьютер и повторить попытку выше.

По-прежнему не работает? Затем попробуйте следующее:

Войти с SYSTEM пользователя и зарегистрировать LOCAL_LISTENER, выполнив ниже SQLs.

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

Как проверить оракул 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 
+0

Я пробовал с обоими форматами, все еще не получилось –

+0

Затем, как я уже упоминал, перезагрузите машину и попробуйте. – Ravi

1

Если вы хотите знать, по умолчанию SID вашей базы данных использовать этот запрос в SQLPLUS:

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

Используйте это значение в URL-адресе JDBC вместо «orcl».

1

Можете ли вы использовать приведенный ниже URL-адрес?
Обратите внимание на разницу, это следует использовать SERVICENAME вместо SID.

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