以前、開発に参加していたチームからトラブルの知らせが入りました。
担当者がお盆休みで不在のときに夜間バッチ処理で異常終了していたとのこと。
ログを確認したところデータベースでエラーが発生しており、エラーコードはORA-03113であったとのこと。
Oracle 11gを使用しているのですが、Oracle Databaseエラー・メッセージ 11g リリース1(11.1)を確認すると下記のような内容です。
ORA-03113: 通信チャネルでend-of-fileが検出されました
原因: クライアントとサーバー・プロセス間の接続が切断されました。
処置: 通信エラーが発生しました。詳細を調査する必要があります。まずネットワークの問題を調べてから、SQL*Net設定を確認してください。また、alert.logファイルでもエラーを調べてください。最後に、サーバー・プロセスが停止しているか、およびエラー時にトレース・ファイルが生成されたかどうかをテストして調べてください。
現地で他のログを確認していただいたのですが、データベースサーバやアプリケーションサーバが再起動した形跡はありません。
インターネットで同様のエラーの発生事例を確認してみるとSQL文が極端に長文であったり取得したデータ量が多い場合にも発生するようです。
SQL文は試験環境で動作確認したそうなので、試験環境と本番環境のデータ量の差の原因であるとあたりをつけました。
実際、仕様変更に伴いSQL文が修正されており、無茶なテーブルの結合が行われていたようです。
見直しをして動作確認したところ正常に実行されたそうです。
プログラマが試験環境と本番環境のデータ量を考慮せずSQL文を書いてトラブルの原因になることがあるのですが、単に結果だけを見て無理やりなSQL文を設計してしまうSEも問題ありだなと思いました。