OracleDBに接続する次の2つのエラーについてこの問題を調査しようとしています。
Java.sql.SQLException
:Io例外:ソケット読み取りがタイムアウトしました私の理解:
Java.sql.SQLException
:Io例外:ソケット読み取りがタイムアウトしました:これは接続が正常に確立されたが、何らかの理由でソケット/データが空であり、データが利用できなかったために最終的にタイムアウトした場合です。上記のエラーをローカルのOracleDB環境で複製することは可能ですか?手順は何ですか?
お時間を割いていただきありがとうございます。
ありがとう。
閉じた接続についてのあなたの理解は正しいです。接続が閉じられた理由:ファイアウォール、ネットワークデバイス、リモートデータベースリスナーなどの外部デバイスは、一定期間非アクティブになった後、ネットワーク接続を強制的に閉じることができます
ReadTimeOutは、アクティブな接続でも発生します。クエリまたはプロシージャに時間がかかる場合は、読み取りタイムアウト例外が発生します。
- 閉じた接続:データベースの実行中にデータベースリスナーをシャットダウンします
- ReadTimedOut:10分を超えてプロシージャにスリープを追加し、アプリケーションからそのプロシージャを呼び出します
Oracle DB環境でのソケット読み取りタイムアウト・エラーの複製:
setNetworkTimeout
for SQL connection //たとえば、タイムアウトを120秒に設定しますJavaからデータベースプロシージャを呼び出し、setNetworkTimeoutよりも長い時間そのプロシージャでスリープします
dbms_lock.sleep(125); -- sleeps for 125 seconds
プロシージャは、125秒のスリープのために120秒以内に戻ってこないため、上記のシナリオではJavaはソケット読み取りタイムアウトをスローします。
Java.sql。*パッケージを使い始めたばかりですが、これが私が理解していることです。閉じた接続は、発生したエラーであり、DBセッションは閉じますが、エラー処理は行われないため、これで終わりです。 Java.SQExceptionを使用すると、このエラーを管理して(throws句を使用)、印刷したり、他のエラー処理メソッドを実行したりできます。
例外とその処理方法に関するOracleからのリンクは次のとおりです。
お役に立てれば。