
■ 夜間バッチが異常終了
一昨日、夜間バッチが異常終了しやがって、監視システムから呼出のメールが到着!
実は、先週も呼出があったので、これで今月2回目です。
運用監視から2年は経つので、そこそこ安定しているシステムなので、短期間に連続とは珍しいです。
...ここ最近、やたらとツキに見放されているんだよなぁ(--;)
放置するわけにもいかないので、眠い目を擦りながら颯爽と自転車で出動します。
■ 障害内容
障害が発生していたのは、DBからデータを抽出してCSVに変換して出力するっていう単純な処理です。
言語はCOBOL。Oracleのテーブルからデータ抽出して、FETCHした所でエラーが発生しているらしく、ログにはこのようなエラーが吐かれています。
ORA-01457: 列の変換により10進数データ型がオーバ
まぁ、これだけで原因は分ったようなものですが、念のためにOracleのエラーメッセージも確認します。
・ORA-01457
状況 列の変換により10 進数データ型がオーバーフローしました。
・原因
指定した式の変換書式が、指定した型に対して大きすぎます。COBOL プログラムのPICTURE 句でCOMP-3 を使用する場合にも、このエラーが発生します。この句は Pro*COBOL プリコンパイラおよびCOBOL で受け入れられますが、このエラーとなります。
・処置
より大きいデータ型を定義するか、データを修正してください。
■ 原因
原因は、抽出元のテーブルの数値を拡張した時に、COBOL側の定義を修正し忘れていた事でした。
という事で、COBOL側を修正して対処完了です。
PIC S9(012) COMP-3. => PIC S9(015) COMP-3.
■ ちょっと気になる
障害自体はそれで改善したのですが、ちょっとCOBOLの挙動が気になります。
というのも、テーブルの数値を拡張(12 → 15)したのは、3年以上前の話なのです。
んで、過去の内容を見ると、13桁までの数値であれば正常に動作していたようでして、これが不可解です。
COBOL側のホスト変数は、PIC S9(012) COMP-3、と12桁なのに、DB側の13桁の数値を受け入れて、なぜエラーが発生しなかったのか?
謎です...。色々と実験したいところですが、眠いし、忙しいので放置します。
※ 今回は14桁の数値が入力されていました。これは流石にダメだった模様。
■ 虹
どうやら寝ている間に雨が降っていたらしく、出社中の道路に水たまりが出来ていました。
そういう天候だったためか、外に綺麗な虹が掛かっていました。

残っていた夜間処理も、何とかサービス開始時間までに終了できたので一安心です。
ふぅ、コーヒー美味しいなぁ(-。-)y-゜゜゜
スポンサードリンク


