- PR -

Oracle8iとの接続でLANケーブルが抜けているとSQLExceptionが返ってこない。

1
投稿者投稿内容
ひでっぷ
会議室デビュー日: 2003/12/09
投稿数: 17
投稿日時: 2006-01-25 17:29
DBサーバー: Oracle8i
DBサーバーOS: Windows2000サーバー

java version 1.5.0_03-b07
OS: TurboLinux10Desktop
JDBCドライバ: 10g リリース1(10.1)ojdbc14.jar

上記のの環境でOracleに接続しデータを取得するプログラムを作成しています。
通常状態での読み書きは問題なく行えました。
LANケーブルが抜けている、Oracleが起動していない場合にこちらでエラーを出そうと思っています。

LANケーブルを抜いてみるとどうも、PreparedStatementのexcecuteQuery()で止まっているようです。
(時間を測ってみましたが15分たっても戻ってきませんでした。)

その後LANケーブルをさしなおすとまもなくしてSQLExceptionが発生します。
(LANケーブルをさしなおしてから1分とたたずにエラーが発生しました。)
ちなみに発生したエラーはNo route to Host もしくは Connection resetです。

PreparedStatementのsetQueryTimeout()を設定してもLANケーブルが抜けている間はSQLExceptionは発生しませんでした。
(この場合はQueryTimeoutを30秒に設定して2分ほど様子を見ました)

なんとかLANケーブルが抜けたままでもSQLExceptionを発生させたいのですが、何かいい方法はないでしょうか。
想馬
大ベテラン
会議室デビュー日: 2003/05/29
投稿数: 245
お住まい・勤務地: 神奈川・東京
投稿日時: 2006-01-25 17:38
思い付きですけど、SQLを実行する前にデータベースがあるPCにネットワーク接続できるか試してみて、接続できなければパラメータを与えてSQLExceptionをインスタンス化して投げてやれば出来そうな気がします。
ひでっぷ
会議室デビュー日: 2003/12/09
投稿数: 17
投稿日時: 2006-01-25 18:08
相馬さん、ご返答ありがとうございます。
今までmysqlを使用しており、mysqlは結構早くエラーが出るので油断してました・・・・。
最悪の場合相馬さんの言われる方法を試してみるしかないでしょうね・・・。

ちなみに接続PCをTurboLinuxからWindowsにしたところLANケーブルを抜いてから約20秒ほどでConnection Resetが出ました。

最終で使用するPCはWindowsなのでこれで問題ないといえば問題ないのですが・・・。
今後のことも考えてほかに何かいい案はないでしょうか。
yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2006-01-26 15:43
Thinドライバーを使っているのでしょうか?

OCIドライバーを使うとどうでしょうか?
(以前、OracleのThinドライバーではsetQueryTimeoutが効かなくて
OCIドライバーを使うとうまくいったような記憶があります。
 ただ、今回のようなケースとはちょっと違うので、それでも駄目かもしれません。)
ひでっぷ
会議室デビュー日: 2003/12/09
投稿数: 17
投稿日時: 2006-01-27 09:41
yuzyさん、ご返答ありがとうございます。
はい、Thinドライバを使用しています。
うろ覚えで申し訳ないのですが、OCIドライバはoracle clientが入ってないと動かなかったのではないでしょうか?

実は手元にoracle clientがなくてOCIドライバは使用できません(まだ試していませんが・・・)

Windowsではエラーがでて、Linuxではエラーが出ないのでOS依存な気がしないでもないですが・・・。

みなさんはこのようなエラーチェックはしていませんか?
もししている方がみえたらどのようにやっているかご教授いただけないでしょうか?
1

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