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
私は私のJDBC文字列を修正することによってこの問題を修正しました。
たとえば、正しいJDBC文字列は次のようになります。
jdbc:Oracle:thin:@myserver:1521/XE
しかし私が使っていたjdbs文字列は...
jdbc:Oracle:thin:@myserver:1521:XE
(注:1521
とXE
の間は/
であるべきです)
この不正なjdbc文字列はORA-12505エラーも出してくれます。
この問題を引き起こす可能性があることがいくつかありますが、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コードは表示されていませんが、おそらくそれは正しいと思われます。接続文字列の一部が間違っていると、他にもさまざまなエラーが発生します。)
私も同じエラーが出ましたが、試してみると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
これはおそらくうまくいくはずです...
このエラーが発生したとき「ORA-12505、TNS:リスナーは現在接続記述子に指定されたSIDを認識していません」
解決策:サービスを開いてOracleServiceXE
を起動し、接続してみてください。
私はこの例外のいくつかの理由を見つけました。
1)default.soのデータベースXEの名前は、 " jdbc:Oracle:thin:@localhost:1521:XE "になります。
2)OracleServiceXE、OracleXETNSListenerが実行されていることを確認します。itは コントロールパネル\すべてのコントロールパネル項目\管理ツール\サービス
私は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を指定すると、このエラーが発生しました。
同様のエラーに直面した、上記の解決策のいずれも助けにはならなかった。 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)
コントロールパネル\すべてのコントロールパネル項目\管理ツール\サービスに移動してリスナーOracleServiceXEおよびOracleXETNSListenerを手動で停止したため、自動的に停止しませんでした。データベースを再起動し、それは魅力のように働いた。
以下のコードを使用すると、問題は解決します。
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:Oracle:thin:@IPAddress:1521/servicename","userName","Password");
私が広く議論したことを見たことがない1つの可能性はホストマシン自体のホスト名を解決する問題があるかもしれないということです。/etc/hostsに$(hostname)のエントリがないと、Oracleリスナーは混乱して起動しません。
それが私の問題であることが判明し、/ etc/hostsにホスト名とIPアドレスを追加することで問題は解決しました。
私は最初に同じ問題でここに来ました。 Windows 8(64ビット)にOracle 12cをインストールしましたが、コマンドラインの 'TNSPING xe'で解決しました。接続が確立されなかった場合、または名前が見つからない場合は、データベース名を試してください。私の場合は、 'orcl' ... 'TNSPING orcl'で、pingが成功した場合は、SIDを 'orcl'に変更する必要があります(または使用したデータベース名はすべて)。
Oracle:シンスタイルのサービス名の構文
シンスタイルのサービス名は、JDBC Thinドライバでのみサポートされています。構文は次のとおりです。
@ //ホスト名:ポート番号/サービス名
http://docs.Oracle.com/cd/B28359_01/Java.111/b31224/urls.htm#BEIDHCBA
私は同じ問題を抱えていたので、この問題を解決するためにnetca
を使ってリスナーを再設定した後、dbca
を使ってORCLであった古いデータベースを削除し、dbca
を使って新しいデータベースを作成しました。
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>`
私も同じ問題に直面しました。 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が接続される前にリスナーが聴くことがある(私がここでは初心者なので私の大まかな参照のために私を許してください)リスナーがいくつかの投稿を読んだ後に推測しています。
私は同じ問題に直面し、OracleServiceXEサービスを再起動することで解決しました。 Services.mscに移動して、「OracleServiceXE」サービスが稼働していることを確認します。
TNSNAMES.oraファイルで「 _ sid _ 」を「 SERVICE_NAME 」に変更することで、この問題を解決しました。
DBがSIDまたはSERVICE_NAMEを要求しているかどうかを確認してください。
乾杯
SQL Workbenchでも同様の問題がありました。
URL
jdbc:Oracle:thin:@ 111.111.111.111:1111: xe
うまくいきません。
URL
jdbc:Oracle:thin:@ 111.111.111.111:1111: asdb
動作します。
これは私の具体的な状況で私を助けます。私は怖い、それはさまざまな解決策を持つ他の多くの理由が存在する可能性があります。
ホストマシンでtnspingとインスタンス名を確認してください。それはあなたにtns decriptionを与えるでしょうし、ほとんどの場合ホスト名は異なっていますが一致しません。
私も自分の問題を解決します
Unixマシンの場合$ tnsping(Enter)
それは私がホスト名が異なることがわかったところで私に完全なtnsの説明を与えます.. :)
接続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");
(@を削除)
理由はわかりませんが、現在機能しています...
start->run->services.msc
をナビゲートするときは、OracleServiceXE
とOracleXETNSListener
の両方が開始ステータスであることを確認してください。
私の場合は、right clicking -> start
で開始して接続が正常に機能しているかどうかを調べたときに、OracleXETNSListener
のみが開始されたがOracleServiceXE
は開始されませんでした。
いくつかのcmdをめちゃくちゃにした後、突然、同じ問題が起こりました。 Oracle SERVICE XEが実行を停止していました。管理ツールから再起動するのに2秒かかりました。 TNX!
私の場合はうまくいかなかった、ようやく私は私のOracleとTNSのリスナーを再起動し、すべてがうまくいった。 2日間苦労していました。
同様の問題がありました。突然問題が発生し始めました - 私たちは負荷分散されたデータベース接続URLを持っています、しかしjdbc接続で私は直接単一のdbを指していました。
バランスのとれたデータベースのURLをロードするように変更しました。
このエラーが発生しました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.
サービスでoracleServiceを再起動/起動することで修正しました