web-dev-qa-db-ja.com

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

次の例外が発生します。

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
5
Rajesh Koppala

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
16
Ravi

以下のURLを使用できますか?
違いに注意してください。これは、SIDの代わりにSERVICENAMEを使用することです。

jdbc:Oracle:thin:@localhost:1521/orclservice
1
Nirmala

データベースのデフォルトSIDを知りたい場合は、sqlplusで次のクエリを使用してください。

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

「orcl」の代わりに、JDBCURLでこの値を使用します。

1

私は同じ問題に直面しています。

LANケーブルを取り外すか、ネット接続を切断して、リスナーのサービスを再起動し、コードを実行してみてください。

それは私のために働いた。

0
RajaRamakhil