fc2ブログ

(元)社内SEの徒然なる日記

夜間バッチ処理エラーで緊急出動!

緊急出動日記

先日、勤め先の基幹システムの夜間処理が異常終了して緊急出動した時の記録です。
中身は、システム管理社の愚痴に近いですけどね。

システム環境

夜間処理は、COBOL&Cシェルで作成されていて、これをSystemwalker Operation Manager(富士通社製のジョブ実行ソフト)で決まった時間に動かしています。
んで、コイツは、Systemwalker Centric Manager(同じく富士通社製の運用監視ソフト)と連携させています。
Centric Managerには、事前にメールサーバと送信先のメールアドレスを登録しておいて、夜間処理が異常終了を検出すると、登録していたメールアドレスにエラー内容を一斉メール送信するっていう(迷惑きわまりない)システムを構築しています。

んで、登録しているメールアドレスっていうのは、私の携帯電話のメールアドレスだったりします。

夜間処理が異常終了

ある日の深夜、酒を飲んで気持ちよく眠っているところ、夜間処理異常終了のメールが着信!
・・・よっぽど、見ない事にしようかと思ったのですが、なけなしの責任感が許しませんでした。

残念ながら、自宅からシステムに接続できません。SSL-VPNを利用した外部接続は準備できているので、やってやれないことはないのですが、私用パソコンからの接続は許されず、会社支給のパソコンなど無いという状況の為、会社までいく事にしました。

会社までは徒歩で40分位、車で行こうかと思ったのですが、数時間前に飲酒をしていたの断念。
タクシーも考えたのですが、歩いても大して時間が変わらなさそうだったので素直に歩こうかと。

会社に入るのが最初の難関

舞い散る雪の中、ようやく会社にたどり着いたのですが、実は会社に侵入するのが一仕事だったりします。
古い建物のためか、カギの開け方がちょっと変わってるんですよね。なにやらコツがあって、毎日開けているうちに慣れるらしいのですが、慣れないうちはひと苦労です。
しかも、深夜、酒、極寒、システム異常で動揺中、という悪条件下ではなおさらです。

もうね、この時点で既に倒れそうですよ。

さあ、復旧だ!

何とか自席にたどり着いて、パソコンの電源オンです。
さて、戦いの始まりです。

原因調査の前に(というか平行して)、ゴミデータの自動削除やバックアップなどの、夜間処理終了後に実行する事を想定しているジョブがOperation Managerに登録されているので、停止させます(正確には、起動日の条件から当日を外す)。

さて、本格的に原因調査開始です。

犯人は、俺か?

どうやら、データベースで一意制約エラーが発生しているようです。
その原因となったデータを抽出してみると、なにやら見覚えがあるんですよ。

嫌な予感がして、過去の作業履歴を洗ってみると、数日前にあるシステムの障害対応のために私がデータパッチを行ったデータがある事が判明。
ってことは、犯人は俺なのか?

いや、?とか言ってる場合じゃなくて、私の責任ですよねorz

とりあえず、稼働優先ですね

まぁ、起きてしまった事を悔やんでも仕方ありません(後で上司には詫びを入れましたが)。
幸い、再度データパッチを実行して再処理をするだけで済みました。

夜間処理の実行時間は、おおよそ1時間。
当初は4時間以上掛かっていたのですが、夜間処理の異常対応の時間が欲しかったので、数年かけてチューニングを行っていたのです。
そのおかげで、何とか稼働予定時間までには復旧が終了できました。

どうすれば良かったのか

当然の話ですが、パッチを当てた時に他に影響が出ないかの調査はしていました。
ですが、見逃してしまっていました。パッチを当てたデータが、複数の処理、複数のテーブルを介して加工された結果、初めて障害条件を満たすという条件だったので、実際に障害が起きるまで気付かなかったんです。
迂闊だったのは否定できない事実ですけどね。

ただ、当初のパッチ自体は間違えていなかったんですよ。
・・・いや、言い訳でも負け惜しみでもなく、事実なんです。

そもそも、特定のオペレーションを行ったデータを処理できない、という既存障害への対応だったんです。
そこを通さないと業務が止まると言うので、データパッチを当てて通るようにしていました。
その時点ではデータパッチだけで済ましていたのですが、後々調べた結果では、データだけでなくプログラムも修正する必要があったようです。

問題になったのは、その既存障害の発生頻度が5年に1回程度。しかも発生したのは、極めて複雑な状態遷移をする一連の処理で、プログラムの修正が極めて困難。さらに、異常終了した処理の直前の処理でも、そのデータを使うので事前対応も無理。

うーむ、どうすれば良かったんだろうか?
パッチを当てないと業務が回らず、パッチを当てると夜間処理が異常終了、プログラムは直せず(少なくとも短時日では無理)、夜間処理の異常終了した処理以外でもデータ使用するため、事前の再パッチでの対応も無理。

あちらをたてれば、こちらがたたず。
出来そうな事といったら、パッチを当てた後に、夜間処理が異常終了する日を捉えて深夜待機。異常終了する処理の手前でジョブを停止して、データパッチを再実行して、ジョブを再開ってくらいですかね?

発生頻度とプログラム修正による障害発生リストを考えると、それが一番良い(安全な)気もしますけどね。

帰れないよ

何はともあれ、障害対応も済んでシステムは普及。実質徹夜で体が辛いので、報告書を提出して早退(シフト勤務扱い)したかったのですが、悪い事に、その日は外せない会議があって帰れなかったりします。

参加者でなくて、私が主催者だったんですよね。
しかも、参加者のスケジュールが合わなくて、他の日にもずらせなかったりして・・・

悪い時には悪い事が重なりますね。
元はといえば、私に原因があるのは分かっちゃいるんですけどね。



スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する