ORA-12505、TNS:リスナーは現在、接続記述子で指定されたSIDを認識していません


154

Windows 7 64ビットOSにOracle 11g Express Editionリリース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

1
サービスからOracleServiceXEを手動で起動すると、うまくいきました。
セン

回答:


184

この問題を修正するには、jdbc文字列を修正しました。

たとえば、正しいjdbc文字列は次のようになります...

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

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

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

(注:間1521およびXEはである必要があります/

この不正なjdbc文字列により、ORA-12505エラーも発生します。


53
/を使用する場合はネットサービス名、コロンを使用する場合はSIDです。
2015

89

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

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

  • データベースが起動していない、
  • データベースがリスナーに登録されていません。たとえば、データベースがリスナーの前に起動されたためです。(データベースが起動すると、すでに実行されている場合はそれ自体がリスナーに登録されます。リスナーが実行されていない場合、データベースは自分自身を登録しません。リスナーが開始されると、データベースを探しに行きません。登録してください。)

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

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

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

sqlplus system / system-password @XE
sqlplus system / system-password
sqlplus / sysdbaとして

system-passwordOracle XEのインストール時にSYSおよびSYSTEMユーザーに設定したパスワードに置き換えてください。)

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

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

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

sqlplus system / system-password @XE

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


3
@Raj:あなたの編集が答えに何をもたらすかはわからないので、削除しました。質問にかなりの量を寄稿したい場合は、他の人の質問を編集するのではなく、自分の回答を投稿してください。
Luke Woodward

@LukeWoodward SP2-0734: unknown command beginning "system/ora..." - rest of line ignored. 3つすべてでこのエラーが発生 します
vaibhavcool20

1
@qtpseleniumSupport:このメッセージは、SQL * Plusにいて、行を入力したことを示しますsystem/ora...(または、SQL * Plusは、読み取りを指示したファイルからその行を読み取ります)。上記のコマンドラインは、コマンドプロンプト/シェル/ターミナルウィンドウから使用するためのものです。あなたは既にSQL * Plusを実行している場合は、交換してくださいsqlplusconnect
ルークウッドワード2015年

「データベースがリスナーに登録されていません。たとえば、データベースがリスナーの前に起動されたためです。」-これで終わりです、ありがとうございます!
Ursache

47

私も同じエラーが出ましたが、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

これはおそらく動作するはずです...


2
やった!を設定するlocal_listenerと、orclリスナーがに表示されlsnrctlます。どうもありがとう!
asgs

これでシステムは動作しましたが、以下を実行したことに注意してください。ALTER SYSTEM set local-listener = XE;
ダニエルウィリアムズ

私が入力すると: 'alter system set local_listener ='(ADDRESS =(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 'scope = both;' それはエラーを返します:ORA-65040: operation not allowed from within a pluggable databaseそれはどういう意味ですか?JDBCを構成できません:/
Alg_D

1
上位投票の回答はどちらも役に立ちましたが、これはさらに役立ちました。リスナーアドレスとして127.0.0.1を持っていなかったようです(自分のPCのローカル名を持つアドレスがありました)。したがって、この新しいものを追加することで、機能し始めました
johnbr

alter system set local_listener = ... 私のために働いた。
Ben Asmussen

31

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

解決策:サービスを開き、開始してからOracleServiceXE、接続を試みます...


同じ問題がありましたが、OracleServiceXEを実行していたため、OracleServiceXEサービスを再起動するとうまくいきました。なぜだか分からない!
Hamedz 2016年

OracleServiceXEを探すときは、XEがデータベースSIDに対応していることを忘れないでください。適切なサービスOracleService [SID]を探していることを確認してください
Sandoval0992

10

この例外の理由をいくつか見つけました。

1)デフォルトのデータベースXEの名前。URLはjdbc:oracle:thin:@localhost:1521:XE」になります。

2)OracleServiceXE、OracleXETNSListenerが実行されていることを確認します。これは、コントロールパネル\すべてのコントロールパネルの項目\管理ツール\サービスにあります。


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名が間違っているため、このエラーを示していました。


私の場合conection = DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl","system","ishantyagi");はうまくいきました。
Pran Kumar Sarkar

8

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

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");

7

同様のエラーに直面し、上記の解決策のいずれも役に立たなかった。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)

停止し、データベース ここに画像の説明を入力してください

リスナーOracleServiceXEおよびOracleXETNSListenerは、コントロールパネル\すべてのコントロールパネルアイテム\管理ツール\サービスに移動しても自動的に停止しなかったため、手動で停止しました。データベースを再起動し、それは魅力のように機能しました。


4

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


4

私が広く議論しなかった1つの可能性は、ホストマシン自体のホスト名を解決する問題があるかもしれないということです。/ etc / hostsに$(hostname)のエントリがない場合、Oracleリスナーは混乱し、起動しません。

それが私の問題であることが判明し、/ etc / hostsにホスト名とIPアドレスを追加すると問題が解決しました。



4

Oracle SQL Developerで接続が機能している場合は、次の図に示すように、接続メニューの情報を使用してURLを作成します。

ここに画像の説明を入力してください

上記の例では、URLは次のようになります。 jdbc:oracle:thin:@ORADEV.myserver.com:1521/myservice

SIDを使用している場合は、ホスト名の後にスラッシュ( "/")の代わりにコロン( ":")があることに注意してください。


2

私も同じ問題に直面しました。VMwareを使用してWindows XP OSにOracle Express Edition 10gをインストールしましたが、正常に動作していました。10gが提供するSQLユーティリティでSQLクエリを入力するのは非常に面倒で、SQL開発者との共同作業に慣れていたため、XPに32ビットSQL開発者をインストールし、DB SID "XE"に接続してみました。しかし、接続はエラーで失敗しました。ORA-12505TNSリスナーは現在、接続記述子で指定されたSIDを認識していません。この問題がSQLユーティリティで正常に機能していて、同じ問題を使用してInformaticaマッピングをいくつか作成していたので、この問題がどのように発生するかについて、私は海に行っていました。私はこれまでにこのことについて多くのことを閲覧し、公開フォーラムで "lsnrctl"のステータスをpingした後に提供された提案を適用しましたが、役に立ちませんでした。しかし、今朝、もう一度新しい接続を作成してみました。そして出来上がり、それは問題なく動作しました。私はいくつかの投稿を読んだ後、DBが接続する前にリスナーが耳を傾けることがあると思います(ここでは初心者なので、大まかな参照は許してください)。マシンを再起動してもう一度確認することをお勧めします。


2

私は同じ問題を抱えていたので、この問題を解決するには、まずnetcaORCLである古いデータベースを使用してリスナーを再構成しdbca、次に使用して新しいデータベースを作成しました。dbca


2

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


2

TNSNAMES.oraファイルの「SID」を「SERVICE_NAME」に変更することで、この問題を修正しました。

DBがSIDまたはSERVICE_NAMEを要求するかどうかを確認してください。

乾杯


2

Oracle Express Editionを使用している場合は、このURLが必要です

jdbc:oracle:thin:@localhost:1521:xeまたはjdbc:oracle:thin:@localhost:1521 / XE

私はpom.xmlのliquibase設定プラグインで同様の問題がありました。そして、私は私の設定を変更しました:

`<configuration>
   <driver>oracle.jdbc.OracleDriver</driver>
   <url>jdbc:oracle:thin:@localhost:1521:xe</url>
   <defaultSchemaName></defaultSchemaName>
   <username>****</username>
   <password>****</password>
</configuration>`

2

接続con = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe"、 "scott"、 "tiger");

私が得たエラー:

java.sql.SQLException:リスナーが次のエラーで接続を拒否しました:ORA-12505、TNS:リスナーは現在、接続記述子で指定されたSIDを認識していませんクライアントが使用した接続記述子はlocalhost:1521:xeでした

解決方法:

接続con = DriverManager.getConnection( "jdbc:oracle:thin:localhost:1521:xe"、 "scott"、 "tiger");

(削除する @)

理由はわかりませんが、現在は機能しています...


1

ホストマシンでtnspingとインスタンス名を実行して確認します。これはtnsの説明を与え、ほとんどの場合、ホスト名は異なり、一致しません。

同様に問題を解決します

Unixマシンでは$ tnsping(Enter)

ホスト名が異なることがわかった場合、完全なtnsの説明が表示されます。


1

の両方OracleServiceXEを確認し、にOracleXETNSListener移動したときにステータスが開始されていることを確認してくださいstart->run->services.msc

私の場合のみOracleXETNSListener開始されましたOracleServiceXEが、開始さright clicking -> startれませんでした。


1

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

URL:

JDBC:オラクル:薄い:@ 111.111.111.111:1111:XE

動作しません。

URL:

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

動作します。

これは私の具体的な状況で私を助けます。恐らく、それは別の解決策で他の多くの理由が存在する可能性があります。


0

同様の問題がありました。問題が突然発生し始めました-負荷分散されたデータベース接続URLを使用していますが、jdbc接続では、単一のデータベースを直接指していました。

負荷分散されたdb urlに変更され、機能しました。


2
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS =(HOST = myhost)(PORT = 1521)(PROTOCOL = tcp))(CONNECT_DATA =(SERVICE_NAME = myorcldbservicename)))のように、完全修飾接続文字列URLを使用することをお勧めします
Nirmala 2015

0

私の場合、うまくいかなかったので、最終的にオラクルとTNSリスナーを再起動し、すべてがうまくいきました。2日間もがいていた。


0

SQL開発者を使用してOracle DBに接続しようとしたときにこのエラーORA-12505が発生しました。TNS:リスナーは現在、接続記述子で指定されたSIDを認識していません

使用されたJDBC文字列はjdbc:oracle:thin:@myserver:1521 / XEでした、明らかに正しいものと2つの必須のOracleサービス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.

0

上でサービス(OracleServiceXE、OracleXETNSListener)を実行する以外に、ウイルス対策ソフトウェア/ファイアウォールが引き続きそれらをブロックする可能性があります。それらがブロックされていないことを確認してください。ここに画像の説明を入力してください



0

オラクルが機能しなくなり、このエラーが発生しました。マシンを再起動し、上記の解決策も試しました。最終的に、コンポーネントサービスを開いてOracleサービスを再起動すると、すべてが機能し始めました。これが誰かを助けることを願っています。


0

データベースリンクを誤って作成しただけです。

私にとっての簡単な修正は、単に「SID」をSERVICE_NAMEに変更することでした

CREATE DATABASE LINK my_db_link
CONNECT TO myUser IDENTIFIED BY myPassword
USING
'
(
    DESCRIPTION=
    (
        ADDRESS=
        (PROTOCOL=TCP)
        (HOST=host-name-heren)
        (PORT=1521)
    )
    (CONNECT_DATA=(SID=theNameOfTheDatabase))
)';

変化

SID=theNameOfTheDatabase

SERVICE_NAME=theNameOfTheDatabase 

私の問題を解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.