「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Oracle DBへ接続しようとした際に
ORA-03135: connection lost contact(接続が失われました)
というエラーが発生することがあります。

特にバッチ処理中や、長時間実行するSQL、アプリケーション側からの接続で発生しやすく、
原因がネットワークにあるのか、DBにあるのか判断が難しいエラーです。

本記事では 主な原因と効果的な対策 をわかりやすく整理します。


ORA-03135 エラーメッセージ

意訳すると

DBサーバとの通信が途中で切れた/接続が維持できなかった


発生する主な原因

1. ネットワークのタイムアウト

  • ルーター・FW・LB・SSLインスペクション装置などのタイムアウト設定

  • 長時間応答が無いと通信を切断される

2. SQLの実行時間が長すぎる

  • 大量データ更新や複雑な検索で応答が止まる

  • 通信が無いとみなされ切断

3. DBサーバ側のパラメータ設定

  • SQLNET.EXPIRE_TIME が未設定

  • DB server process timeout

4. Oracle Net の再送制御

  • TCP KeepAliveが有効でない

  • OSレベルのソケット維持設定不足

5. ネットワーク回線やVPNの不安定

  • Wi-FiやVPN経由の接続で発生しやすい


実務で効果が高い対処方法

① SQLNET.EXPIRE_TIME を設定する(DB側)

Oracle Netの定期送信で接続維持を行う

$ORACLE_HOME/network/admin/sqlnet.ora に以下を追加/変更:



10は 10分間隔で keepalive パケットを送信

※DB再起動が必要


② FireWall / LoadBalancer / Proxy のタイムアウト調整

以下の値を確認し、短すぎる場合は延長する

項目推奨例
TCP Session Timeout900秒〜1800秒
HTTPS Idle Timeout300秒以上
SSL Inspection Timeout900秒以上
Connect Timeout120〜300秒

長時間SQLが想定される業務(データ移行、帳票処理など)の場合は特に重要です。


③ アプリケーション側の接続タイムアウト設定

JDBCでの例(Java):



接続維持設定(HikariCP例):


④ SQLのパフォーマンス改善

  • インデックス不足

  • 不要なソート・関数使用

  • フルスキャンの見直し

  • バッチ更新の分割

SQLチューニングにより根本解決できるケースが最も多い


⑤ Wi-FiやVPN経由接続を避ける

ネットワーク経由が不安定な場合に顕著
VPN切断 → DB通信切断 → ORA-03135 という流れも多い


実務でのトラブル事例と解決例

状況原因対策
バッチ実行時に毎回 20分前後で切断FWのIdle Timeoutが短いIdle Timeoutを900秒へ変更
大量UPDATE実行中にエラーSQL実行時間が長すぎ更新処理を分割/EXPIRE_TIME設定
VPN接続でのみ発生ネットワーク切断有線接続で安定化

エラー発生時の確認ポイントチェックリスト

  • 切断タイミングは何分後か?

  • SQLは長時間実行しているか?

  • VPN/Wi-Fi利用?

  • firewall / proxy / LB の idle timeout 値は?

  • SQLNET.EXPIRE_TIME の設定有無

  • アプリ側の接続設定は適切か?


まとめ

ORA-03135は「通信切断」が原因で発生するエラーであり、
ネットワーク側とDB側の両面から対策が必要です。

効果的な対処

  1. SQLNET.EXPIRE_TIME を設定

  2. ネットワークタイムアウト値の延長

  3. アプリケーションの接続設定

  4. SQLパフォーマンス改善

特に 長時間SQL処理を行うバッチ処理ではほぼ必須の対策です。

Ads by Google