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 ");
}
}
}
次の例外が発生します。
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
OracleデータベースのSIDがわかっている場合は、
jdbc:Oracle:thin:@localhost:1521:orcl
それ以外の場合は、サービス名がある場合は以下を使用してください
jdbc:Oracle:thin:@localhost:1521/orcl
また、ORCL
という名前のサービス名が稼働していることを確認してください。それでも機能しない場合は、マシンを再起動して上記を再試行する必要があります。
それでも機能しませんか?次に、以下を試してください:
SYSTEM
ユーザーでログインし、登録しますLOCAL_LISTENER
以下のSQLを実行します。
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
以下のURLを使用できますか?
違いに注意してください。これは、SIDの代わりにSERVICENAMEを使用することです。
jdbc:Oracle:thin:@localhost:1521/orclservice
データベースのデフォルトSIDを知りたい場合は、sqlplusで次のクエリを使用してください。
SELECT sys_context('USERENV', 'SID') FROM DUAL;
「orcl」の代わりに、JDBCURLでこの値を使用します。
私は同じ問題に直面しています。
LANケーブルを取り外すか、ネット接続を切断して、リスナーのサービスを再起動し、コードを実行してみてください。
それは私のために働いた。