189

Windows 7 64 ビット OS に Oracle 11g Express Edition Release 2 をインストールし、JDBC プログラムを実行しようとすると、次のエラーが発生しました。

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more
4

29 に答える 29

242

jdbc 文字列を修正して、この問題を修正しました。

たとえば、正しい jdbc 文字列は...

jdbc:oracle:thin:@myserver:1521/XE

しかし、私が使用していたjdbs文字列は...

jdbc:oracle:thin:@myserver:1521:XE

(注: と の間は1521XEある必要があります/)

この悪い jdbc 文字列によって、ORA-12505 エラーも発生します。

于 2013-12-11T00:48:12.703 に答える
105

この問題の原因はいくつかありますが、JDBC の使用を開始する前に、SQL*Plus を使用してデータベースに接続できることを確認する必要があります。SQL*Plus に慣れていない場合、これは Oracle データベースに接続するためのコマンドライン ツールであり、長い間 Oracle の標準的な部分であり、Oracle XE に含まれています。

JDBC を使用して Oracle データベースに接続する場合、データベースには直接接続しません。代わりに、TNS リスナーに接続すると、データベースに接続されます。このエラーORA-12505は、リスナーが起動していて接続できたが、データベースが起動していることを認識していないため、データベースに接続できなかったことを意味します。これには 2 つの理由があります。

  • データベースが起動されていない、
  • データベースがリスナーに登録されていません。たとえば、データベースがリスナーの前に開始されたことが原因です。(データベースが起動すると、すでに実行されている場合はリスナーに登録されます。リスナーが実行されていない場合、データベースはそれ自体を登録しません。また、リスナーが起動した場合、データベースを検索しません。それに登録します。)

ORA-12505 は、リスナーがそのデータベースについて認識しているが、リスナーがデータベースからデータベースが起動しているという通知を受け取っていないことを意味します。(間違ったSIDを使用して間違ったデータベースに接続しようとすると、「TNS: 指定された接続識別子を解決できませんでした」というORA-12154エラーが発生します。)

サービス スナップインで実行されている Oracle サービスは何ですか? (これは、[コントロール パネル] > [管理ツール] > [サービス] から開くか、[スタート] > [実行] > から開きますservices.msc。) OracleServiceXE および OracleXETNSListener サービスを実行する必要があります。

両方のサービスが開始されている場合、コマンド プロンプトで次のいずれかを使用して SQL*Plus のデータベースに接続できますか? (Oracle XEをインストールしたマシンでこれらを実行していると仮定しています。)

sqlplus システム/システム パスワード@XE
sqlplus システム/システムパスワード
sqlplus / as sysdba

system-password( Oracle XEのインストール中にSYSおよびSYSTEMユーザーに設定したパスワードに置き換えます。)

これら 3 つのうち最初の 1 つは TNS リスナーを介して接続しますが、2 番目の 2 つはリスナーを介さずにデータベースに直接接続し、データベースと同じマシン上にいる場合にのみ機能します。最初の 1 つが失敗し、他の 2 つが成功した場合、JDBC 接続も失敗します。その場合は、他の 2 つのいずれかを使用してデータベースに接続し、 を実行しますALTER SYSTEM REGISTER。その後、SQL*Plus を終了し、最初の形式を再試行してください。

3 番目が失敗しても 2 番目が機能する場合は、ユーザー アカウントを ora_dba グループに追加します。これは、[コントロール パネル] > [コンピューターの管理] > [ローカル ユーザーとグループ] で行います。

フォームの接続を取得できたら

sqlplus システム/システム パスワード@XE

動作するには、JDBC 経由で Oracle XE に接続できる必要があります。(ちなみに、データベースへの接続に使用している JDBC コードは示されていませんが、おそらく正しいと思います。接続文字列の一部が間違っていると、他のさまざまなエラーが発生します。)

于 2013-08-12T21:19:50.127 に答える
65

私も同じエラーが発生しましたが、3つすべてを試してみると失敗しました。上記の3つが失敗した場合.サービス(私の場合はXE)が見つからない場合はLSNRCTLステータスを試してくださいこれを試してください

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

これでサービスが表示されます 表示
されない場合でも、これを試してみてください

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

これはおそらくうまくいくはずです...

于 2013-10-28T08:41:34.973 に答える
33

このエラーが発生した場合、「ORA-12505、TNS: リスナーは現在、接続記述子で指定された SID を認識していません」

解決策: サービスを開いて を開始OracleServiceXEし、その後接続を試みます...

于 2013-10-21T06:35:25.933 に答える
8

同様のエラーが発生したため、上記の解決策はどれも役に立ちませんでした。listner.ora ファイルに問題がありました。誤って、以下の参照 (星の間のセクション *)から追加SIDしてしまいました。SID_LIST

 SID_LIST_LISTENER =
      (SID_LIST =

        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
          (PROGRAM = extproc)
        )
        )

 *(SID_DESC =
           (SID_NAME = XE)
           (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
         )*
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
      )


    DEFAULT_SERVICE_LISTENER = (XE)

このエラーを次のように修正しました。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
       (SID_NAME = XE)
       (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
     )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )


DEFAULT_SERVICE_LISTENER = (XE)

停止し、データベースここに画像の説明を入力

Control Panel\All Control Panel Items\Administrative Tools\Services に移動しても、リスナー OracleServiceXE および OracleXETNSListener が自動的に停止しなかったため、手動で停止しました。データベースを再起動すると、魅力的に機能しました。

于 2016-04-27T21:14:18.973 に答える
8

JDBC コードを修正して、この問題を解決しました。

正しい JDBC 文字列は...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe","system","ishantyagi");

しかし、私が使用していたJDBC文字列は...

conection = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");

そのため、xe の代わりに orcl を指定すると、SID 名が間違っていたため、このエラーが表示されました。

于 2014-09-11T11:43:17.877 に答える
8

以下のコードを使用すると、問題は解決します。

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");
于 2015-07-09T06:44:36.950 に答える
4

Oracle: シン スタイルのサービス名の構文

Thin スタイルのサービス名は、JDBC Thin ドライバーでのみサポートされます。構文は次のとおりです。

@//ホスト名:ポート番号/サービス名

http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA

于 2015-01-30T20:35:53.607 に答える
4

私は最初に同じ問題でここに来ました。Windows 8(64ビット)にOracle 12cをインストールしましたが、コマンドラインで「TNSPING xe」によって解決しました...接続が確立されない場合、または名前が見つからない場合は、データベース名を試してください。私の場合、それは「orcl」...「TNSPING orcl」でした。pingが成功した場合は、SIDを「orcl」に変更する必要があります(または使用したデータベース名)...

于 2013-11-03T00:45:36.947 に答える
3

同じ問題に直面し、OracleServiceXE サービスを再起動して解決しました。Services.msc に移動し、'OracleServiceXE' サービスが稼働中であることを確認します。

于 2015-04-09T10:13:38.543 に答える
2

をナビゲートするときに、 と ステータスが開始されていることの両方OracleServiceXEを確認してください。OracleXETNSListenerstart->run->services.msc

私のケースでOracleXETNSListenerは、開始されたが開始OracleServiceXEされなかったので、開始しright clicking -> startて接続を確認したところ、私のために機能していました

于 2015-08-10T14:09:55.843 に答える
2

私は同じ問題を抱えていたので、この問題を解決するために、最初に使用してリスナーを再構成し、その後netca使用してORCLであった古いデータベースを削除し、次に使用dbcaして新しいデータベースを再度作成しましたdbca

于 2013-12-25T15:23:42.310 に答える
1

SQL 開発者を使用して Oracle DB に接続しようとしたときに、このエラーORA-12505, TNS:listener does not currently know of SID given in connect descriptorが発生しました。

使用された JDBC 文字列はjdbc:oracle:thin:@myserver:1521/XEで、明らかに正しい 1 つと、2 つの必須のオラクル サービスOracleServiceXE、OracleXETNSListener が稼働していました。

この問題を解決した方法 (Windows 10 の場合)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.
于 2019-02-21T10:59:08.733 に答える
1

SQL Workbench でも同様の問題がありました。

URL:

jdbc:oracle:thin:@111.111.111.111:1111: xe

動作しません。

URL:

jdbc:oracle:thin:@111.111.111.111:1111: asdb

動作します。

これは、私の具体的な状況で役立ちます。残念ながら、それにはさまざまな解決策がある他の多くの理由が存在する可能性があります。

于 2016-08-08T08:03:13.850 に答える