- PR -

Oracle_jdbc接続(Thin)で連続実行途中で「SQLException:I/O例外」が発生する

1
投稿者投稿内容
ごんす
会議室デビュー日: 2006/10/27
投稿数: 2
投稿日時: 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なのか切り分けが不明でしたので、こちらに投稿させていただきました)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-10-27 23:36
Ethereal や Packetyzer でパケットキャプチャをしてどのようなシーケンスで接続の確率成功/失敗が発生しているのか確認してみてはいかがでしょうか。
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 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/10/27
投稿数: 2
投稿日時: 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は***でマスクさせていただきました。

そばに本番機が無いので、パケットキャプチャは後日対応してみます。
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)