Oracleエラー対応(ORA-03135):ORA-03135発生時の調査対応について

現役DBAが解説 ~Oracleエラー対応~

データベース接続中にORA-03135が発生する可能性があります。
本記事ではORA-03135発生時の原因および対策を解説します。

1. エラーメッセージ

ORA-03135: 接続が失われました
プロセスID: XXX
セッションID: XXX、シリアル番号: XXX

ORA-03135は、接続状況によってはTNS-3135やORA-03113などのエラーで出力される場合があります。

2. 原因・対策

本記事では ORA-03135が発生するケースを3つご紹介します。

2-1 サーバが予期せず終了、または強制的に終了したケース

接続中にサーバが予期せず終了した場合に発生します。
サーバ状態を確認し、正常であれば再度接続を行います。

2-2 サーバ接続中にタイムアウトで接続が切れるケース

接続タイムアウトエラーは、データベース接続中の認証フェーズで許可された時間内に完了しない場合に発生します。

データベース側の対策としては、sqlnet.oraのSQLNET.INBOUND_CONNECT_TIMEOUTパラメータの値を変更することで事象回避できます。
SQLNET.INBOUND_CONNECT_TIMEOUTは、クライアントがデータベースに接続して必要な認証情報を提供する時間を指定します。

●例(接続タイムアウトを120秒に設定):
SQLNET.INBOUND_CONNECT_TIMEOUT = 120

2-3 アイドル接続タイムアウトのケース

セッションが一定時間アイドル状態の場合で、設定されたアイドル接続時間を超過したことにより、セッションが切断された際に発生します。

アイドル時間の設定はファイアウォール(機器側やサーバ側)にあるため、切り分けが難しい場合があります。

データベース側での対策としては、sqlnet.oraのSQLNET.EXPIRE_TIMEパラメータの値を変更することで事象回避できます。
SQLNET.EXPIRE_TIMEは、接続がアクティブであることを確認する間隔(分単位)を指定します。

●例(アクティブ確認間隔を10分に設定):
SQLNET.EXPIRE_TIME=10

3. 最後に

本エラーは、サーバ接続中にORA-03135が発生したケースでは原因の範囲が広く、調査が難航し長期化する場合があります。
調査としては問題の切り分けから行うことをお勧めします。

なお、SQLNETパラメータ値の変更ですが、負荷やセキュリティ観点を考慮し、少しずつ値を調整することをお勧めします。