いままで書いていない話を書こうと思う。
転職nendo×はてなブログ 特別お題キャンペーン #しごとの思い出
タイトルは大げさだけど、オレがなんとかできなかったらその可能性は無くは無かった。
某国の郵便貯金システムを作りに行っていたとき、本番カットオーバーしても毎日早朝のシステム立ち上げから夜のバッチまで立ち会い。昼間のオンライン中も立ち会いだが、大体は居るだけでいいので我々用に割り当てられたブースで仮眠したりしてた。そんなこんなで働いている時間だけカウントしても残業時間200時間/月。
昼間も仮眠してたりするけど、よくプリンタがジャムってて直しに呼ばれてた。だって向こうの紙はトントンって揃えても揃わないんだもん。厚みもまちまちだし、折れて挟まっている紙もあるし。
ポン酢しょうゆと紙はよく密輸してた。
ちょっと脱線したけど、この話よりももう少し前の話である。
カットオーバーしてまだ10日くらいのある夜、問題は夜間バッチで起きた。通信系やミドルウェア環境が担当のオレが担当外の部分だったのでそんなバカな実装をしているのは知らなかったのだが、夜間バッチの処理の画面の中に障害回復の全面リストア画面も組み込まれていた。もちろん、夜間バッチでそんな実行をすることはありえない。全面リストアなのでバックアップ取得時点に戻るわけで、昼のオンラインのデータが全部飛ぶ。
我々は現地人のオペレーターの後ろに背後霊のように立っているのも辛いので、オペレータの操作画面を自分たちのブースに引っ張って監視していた。割とまじめに見ていない時もあるのだが、その時は夜間バッチが始まったばかりできちんと見ていた。
「おい、いつもの夜間バッチじゃない画面だぞ」
「なんかRestoreとか書いてある」
「やばい、とにかく止めろ」
部下をオペレータ室の走らせてすぐに停止である。
何が起きたかというと、Oracle 7のデータベースのうちコントロールファイルとREDOログファイルが前日夜間バッチ終了時点まで半端に戻ってしまっていた。つまり当日のオンライン開始前状態である。
Oracleの起動を試みるもエラーになって起動しない。リストア処理のログを確認するとコントロールファイルは完全にオンライン開始前、REDOログはサイズが大きいこともあり途中までだった。データファイルは幸いまだリストア前だった。
日本のプロダクトの担当者を捕まえて電話するも、しょせん自社で作っているわけではなくORACLE社と技術的なやりとりをしているだけなので何も回復案が出てこない。現地時間で2時くらいまで粘ったが何もなかった。
そこで頭を切り替えることにした。幸いデータファイルだけは壊れていない。立ち上がりさえすれば夜間バッチもできるし、翌日もオンラインができる。
そこからコントロールファイルをバイナリでチェックしてみる。幸いviぽい操作性のxiというバイナリエディタがあった。一方不幸なことにOracleのデータベースファイルはUNIXのファイルシステム上にはなく、それぞれパーティションを作ってrawで持っていた。全部rawからファイルシステム上にダンプする必要がある。
REDOログファイルは満杯になったらスワップしてアーカイブREDOログを吐き出しREDOログ番号が繰り上がる。細かいことは省くが、リストアされてしまったコントロールファイルの中のREDOログ番号はオンライン前の番号である。そして半端に書き換えられたREDOログの番号はオンライン前のものとオンライン終了後のものが混在している。
最初はそのREDOログ番号の状況に、コントロールファイルの中身を合わせてあげればうまくいくかと思った。でもエラーで起動しない。
仕方ないのでREDOログも完全にリストアすることにした。そしてコントロールファイル内のREDOログ番号も完全に合わせた。そしてREDOログとアーカイブREDOを無視するモードで起動を試みる。
立ち上がった!
当日(もう日付変わって前日だけど)オンラインの更新分が読める!
一度、きちんとOracle Databaseを正常終了。今度は通常起動して再度普通に動いていることを確認。ここで4時過ぎ。オンライン開始時間まで2時間切ってる。
オペレータに直った旨を伝え、夜間バッチを実施させる。なんとかオンライン開始まで間に合った。あのDBが直った瞬間の暁は忘れられない。
オレと2名の部下の人があーでもないこーでもないとやっている時に、親会社の課長とか元請の人間とかうるさかったけど、「うっさい黙ってろ」(原文ママ)と言って黙らせたけど、ほんとにオレたちが直せなかったら国際問題になるかと思った。壊したのはオレたちじゃなく顧客側のオペレータだけど、ちょっとした操作番号違いでぶっ壊れるメニュー構成にしたのはこちら側だし。
まあ、データベースをバイナリレベルで書き換えて直すなんて、普通あり得ない話なんで結局のところ
何の自慢にもなりません。