2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

業務にてORA-03135エラーに苦しめられたため備忘として記載します。

ORA-03135

OracleDBとの接続中にOracleDBサーバが何かしらの理由で停止した時や、接続タイムアウトが起きたときに発生

sqlnet.log
YYYY/MM/DD HH:mm:ss, pid=XXXXX,XXXXXXX,ERROR,Error - ORA-03135: 接続が失われました
プロセスID: XX
セッションID:XXX、シリアル番号:XXX

一般的な発生原因

直接原因はクライアントサーバとDBサーバの接続が切断されたこと。
根本原因はOS・NW・アプリなど多岐にわたる。

1 パフォーマンスの問題

一次的なネットワークの負荷の上昇、マシンリソースの不足などの場合

2 外部要因による切断

クライアントからの接続がアイドル状態で、外部要因(NW機器・OSなど)により、接続が切断された場合

3 sqlnet.oraのタイムアウト設定

クライアントがDBへの接続時、sqlnet.oraで設定されたタイムアウトの時間内に、認証処理が完了しなかった場合

4 Oracleの異常な動作

DB側での何かしらのエラーが起きて強制切断された場合

対応内容

再現性の確認

クライアントサーバのアプリケーションログと突合し、どの処理が実行されたときにエラーが発生するか確認。

結果としては処理内容に関わらず5~10分程度アイドル状態が続いた後にDBへのアクセスがあると発生することが判明。再現性はあると判断。

しかしこの段階ではどこで接続が切れているかは不明

パケットキャプチャ取得

どこで接続が切れているか確認するため、DBサーバ・クライアントサーバにパケットキャプチャを仕掛けて再現試験を実施し、パケットを解析。

DBサーバのパケットを見るとクライアントサーバがRSTパケットを送信している。
一方でクライアントサーバのパケットを見ると逆にDBサーバ側からRSTを送信しているという不自然な状態。

上記から間にいるNW機器が怪しいと判断。

原因特定

NWの担当者に連携し調査してもらったところCiscoのLBがIdle Timeoutという設定を持っていたことが原因と判明。

このパラメータは指定したセッションのアイドル状態が指定した秒数続いた場合、強制的に両方のサーバにRSTパケットを送ってセッションを切ってしまうとのこと(送信元を対向のIPアドレスに偽装するおまけ付き)

原因がわかったため、NW機器のタイムアウト設定と、DBサーバやクライアントサーバのタイムアウト設定を調整し解決。

最後に

数多くある発生パターンの一つにすぎませんが、本記事がどなたかのお役に立てば幸いです。
ご覧いただきありがとうございました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?