- - PR -
Oracle_jdbc接続(Thin)で連続実行途中で「SQLException:I/O例外」が発生する
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-10-27 20:35
Java 初心者です。はじめまして。
Javaアプリケーション base:j2sdk1.4.1_01(Server-1)から、jdbcドライバ oracle9i.jar (入手先不明)を用いてOracle9i 9.2.0.1(Server-2)に書き込む処理をしています。 通常時(2年は使っている)は、問題が一切ないのですが、Server-1から立て続けに約10セッション(約3秒の間)以上処理したとき、 Caused by: java.sql.SQLException: I/O例外です。: The Network Adapter could not establish the connection が発生します。 他の情報検索を一通りしたのですが、初回の接続時からTNSname.ora等の設定がおかしいとの事でしか拾うことが出来ず、今回のような通常接続時は問題ないケースはありませんでした。 障害の切り分けとして、javaアプリケーション側なのか、Oracle側なのかを調べたいのですが、どのような情報を調査すれば良いのか解りません。 Oracle側は、このエラーに関する事が吐き出されているログファイルを見つけることが出来ませんでした。 たとえば、OracleインストールDirのxxxファイル等 ご教授頂けませんでしょうか? 宜しくお願い致します。 (JAVAなのかOracleなのか切り分けが不明でしたので、こちらに投稿させていただきました) |
|
投稿日時: 2006-10-27 23:36
Ethereal や Packetyzer でパケットキャプチャをしてどのようなシーケンスで接続の確率成功/失敗が発生しているのか確認してみてはいかがでしょうか。
|
|
投稿日時: 2006-10-30 07:27
今回の状況と異なりますがリスナを停止した状態で接続を行うと表題のエラーが発生します
上記から以下の状況が予想されます Oracle側でサーバプロセスを作成できない Oracle側のF/Wでクライアントが使用するポートがブロックされる、または利用可能ポートが取得できない 1.Oracle関係ログの場所です リスナのログファイル %ORACLE_HOME%\NETWORK\log\listener.log %ORACLE_HOME%の例 C:\oracle\product\10.1.0\db_1 アラートファイル等 ADMINディレクトリ (通常はORACLE_HOMEより上位にある) admin\DB名\bdump\alert_<SID>.log 2.ORA-17002で検索 ORA-17002はエラーメッセージのマニュアルではなく下記に記述があります Oracle Database JDBC開発者ガイドおよびリファレンス C JDBCエラー・メッセージ http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-697019&bbsid=1&no=6107&view=8 連続してconnectすると発生するようです アプリケーションでエラーコードを出力していないようであれば出力した方がよいと思います [ メッセージ編集済み 編集者: 99ri 編集日時 2006-10-30 11:41 ] |
|
投稿日時: 2006-11-01 16:55
ご意見有難うございます。
99riさんの回答を元に検証環境ですが、 リスナログとアラートログを確認してみました。 <alert_[SID].log> リスナ起動時 Database Characterset is JA16SJIS replication_dependency_tracking turned off (no async multimaster replication found) Completed: alter database open <listner.log> 起動時 TNSLSNR for 32-bit Windows: Version 9.2.0.1.0 - Production on 01-NOV-2006 15:24:20 Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved. システム・パラメータ・ファイルはC:\oracle\ora92\network\admin\listener.oraです。 ログ・メッセージをC:\oracle\ora92\network\log\listener.logに書き込みました。 トレース情報をC:\oracle\ora92\network\trace\listener.trcに書き込みました。 トレース・レベルは現在0です。 pid=3196で起動しました リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc))) リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=***)(PORT=1521))) TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE 01-NOV-2006 15:24:29 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=[SID].world)(CID=(PROGRAM=C:\oracle\ora92\bin\sqlplus.exe)(HOST=***)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=***)(PORT=1788)) * establish * [SID].world * 0 リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=***)(PORT=8080))(Presentation=HTTP)(Session=RAW)) リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=***)(PORT=2100))(Presentation=FTP)(Session=RAW)) 01-NOV-2006 15:24:52 * service_register * [SID] * 0 01-NOV-2006 15:43:10 * (CONNECT_DATA=(SID=[SID])(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=***)(PORT=1840)) * establish * [SID] * 0 01-NOV-2006 15:43:11 * service_update * [SID] * 0 01-NOV-2006 15:43:15 * (CONNECT_DATA=(SID=[SID])(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=***)(PORT=1843)) * establish * [SID] * 0 01-NOV-2006 15:43:44 * service_update * [SID] * 0 この後、Listnerを停止してApp起動したが、App側にSQLException(コードは出ない)がでますが、Oracle側は何も出ませんでした。 ※HOST,SIDは***でマスクさせていただきました。 そばに本番機が無いので、パケットキャプチャは後日対応してみます。 |
|
投稿日時: 2006-11-02 10:09
最初はOracle側でサーバプロセスを作成できない場合と書きましたが
後述*1になりました。 クライアント側がポート1521にconnectにいって接続が確立できない場合に 発生するのではないでしょうか(OracleでなくOSレベルの問題)? Oracleサーバ側のOSはなんでしょうか? 興味があるのならリスナのトレースを出力することもできます admin: 管理用のトレース情報を出力します。 LSNRCTL> TRACE ADMIN LSNRCTL> start *1 Oracle側でサーバプロセスを作成できない に関してはOracleのエラーコードが出力されました(現象と違う) Oracleの初期化パラメータPROCESSの定義より多いサーバプロセスを起動する場合 プロセス多数によるOracleのメモリ不足による場合 [ メッセージ編集済み 編集者: 99ri 編集日時 2006-11-02 11:40 ] |
1