web-dev-qa-db-ja.com

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

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
127
Learner

私は私のJDBC文字列を修正することによってこの問題を修正しました。

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

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

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

jdbc:Oracle:thin:@myserver:1521:XE

(注:1521XEの間は/であるべきです)

この不正なjdbc文字列はORA-12505エラーも出してくれます。

146
Wade H

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

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

  • データベースが起動していません。
  • データベースがリスナーに登録されていません。データベースはリスナーより前に起動されたためです。 (データベースが起動すると、すでに実行されている場合はリスナーに自身を登録します。リスナーが実行されていない場合はデータベースはそれ自体を登録しません。リスナーが起動する場合はデータベースを検索しません。登録してください。)

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

サービススナップインで実行されているOracleサービスは何ですか? (「コントロールパネル」→「管理ツール」→「サービス」から開くか、または「スタート」→「ファイル名を指定して実行」→「services.msc」の順に選択します。)サービスOracleServiceXEおよびOracleXETNSListenerを実行する必要があります。

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

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

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

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

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

あなたがフォームの接続を取得することができたら

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

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

83
Luke Woodward

私も同じエラーが出ましたが、試してみると3つとも失敗しました。上記の3つが失敗した場合。サービス(私の場合はXE)が見つからない場合はLSNRCTLステータスを試してみてください。これはsqlplus /nolog conn system ... password ... connected. alter system register;
exit
lsnrctl stat
...
です。
これでサービスを見ることができます
見ていなくてもこれを試してみてください
sqlplus /nolog
conn system
... password ... connected.
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(Host=localhost)(PORT=1521))' scope = both;
... system altered ...
alter system register;
exit
lsnrctl stat

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

36
Raj

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

解決策:サービスを開いてOracleServiceXEを起動し、接続してみてください。

28

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

1)default.soのデータベースXEの名前は、 " jdbc:Oracle:thin:@localhost:1521:XE "になります。

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

10
rajeesh

私は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");

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

8
javabeginner

同様のエラーに直面した、上記の解決策のいずれも助けにはならなかった。 listner.oraファイルに問題がありました。間違って私はSID_LISTからSIDを追加しました。

 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)

停止し、データベース enter image description here

コントロールパネル\すべてのコントロールパネル項目\管理ツール\サービスに移動してリスナーOracleServiceXEおよびOracleXETNSListenerを手動で停止したため、自動的に停止しませんでした。データベースを再起動し、それは魅力のように働いた。

7
Nirmal Mangal

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

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

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

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

4
BillT

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

4
Jose Rego

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

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

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

http://docs.Oracle.com/cd/B28359_01/Java.111/b31224/urls.htm#BEIDHCBA

4
jeton

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

2
The Technokrat

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
Pavlo Chechehov

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

2
user2905345

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

2
Vijay Thayalan

TNSNAMES.oraファイルで「 _ sid _ 」を「 SERVICE_NAME 」に変更することで、この問題を解決しました。

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

乾杯

1
Akshay Lokur

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

URL

jdbc:Oracle:thin:@ 111.111.111.111:1111: xe

うまくいきません。

URL

jdbc:Oracle:thin:@ 111.111.111.111:1111: asdb

動作します。

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

1

ホストマシンでtnspingとインスタンス名を確認してください。それはあなたにtns decriptionを与えるでしょうし、ほとんどの場合ホスト名は異なっていますが一致しません。

私も自分の問題を解決します

Unixマシンの場合$ tnsping(Enter)

それは私がホスト名が異なることがわかったところで私に完全なtnsの説明を与えます.. :)

1
Abhishek Banik

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

私が得たエラー:

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

解決方法

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

(@を削除)

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

1

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

私の場合は、right clicking -> startで開始して接続が正常に機能しているかどうかを調べたときに、OracleXETNSListenerのみが開始されたがOracleServiceXEは開始されませんでした。

1
user5211481

いくつかのcmdをめちゃくちゃにした後、突然、同じ問題が起こりました。 Oracle SERVICE XEが実行を停止していました。管理ツールから再起動するのに2秒かかりました。 TNX!

1
Brian Mk

サービス(OracleServiceXE、OracleXETNSListener)の実行とは別に、ウイルス対策ソフトウェア/ファイアウォールがそれらをブロックする可能性があります。ブロックされていないことを確認してください。 enter image description here

0
sql_dummy

私の場合はうまくいかなかった、ようやく私は私のOracleとTNSのリスナーを再起動し、すべてがうまくいった。 2日間苦労していました。

0
Amarjeet

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

バランスのとれたデータベースのURLをロードするように変更しました。

0
Kisanagaram

このエラーが発生しましたORA-12505、TNS:SQL開発者を使用してOracle DBに接続しようとしたときに、リスナーは現在接続記述子に指定された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
r-sunny

サービスでoracleServiceを再起動/起動することで修正しました