やっちまった!


 確かに前兆というか、虫の知らせというか、悪い予感は してた。

 その日の朝、うっかり電車の中で熟睡してしまい、 目的地である三河豊田駅を思いっきり乗り越してしまった。 超過料金払って逆方向の列車に乗り返すときの 客の視線の恥ずかしかったこと。

 やたらとWindowsが落ちる。確かにマイクロソフト にとって「安定性」という言葉がもっとも縁遠い存在で あるなんてことは百も承知だが、それにしてもなんか変だ。 なんかなければいいのだが・・・。

 なぁんてことは露にも思わず、淡々と仕事してたとき のことです。珍しくよそ事はせず、仕事だけやってました。

 その日の作業は、新しくコンパイルしたツールを 自動バージョンアップ用のサーバにアップすること。 そのためにはプログラムの最終更新日付を管理してる データベースを触って、今後アップするプログラムの データを更新しなければいけないと。

 とは言っても単純にSQL分を発行するだけであって、 それほど難しい作業という訳じゃない。 ドキュメントの例にしたがってデータを更新。

 よし、これで準備は整ったな。じゃあちょっとテスト してみよっと。・・・・・・・あれぇ?エラーで止まる。 おっかしいなぁ。ちゃんとデータはアップしてるよなぁ。 打ち間違いしたかなぁ、もう一度登録し直してみるか。 ・・・・・・・あれぇ?やっぱダメだ。 なんでよぉ、マニュアル通りにちゃんとやってるじゃんかよぉ?

 とまぁこんな感じで登録してはテスト、失敗しては 登録し直してもう一回・・・の永久ループにはまって しまいました。だんだんとイライラしてくるし、 集中力がなくなってくる。

 そして、ループにはまって1時間が経過した頃、 ついに恐れていたことが起こってしまったのです。

 「さっき打ち込んだデータ消して・・・ ちょっと念のためもう一度データダンプ(一覧表示) してみるか・・・」とSQL文を発行。

 「SQLは正常に処理されました。」

 ・・・・あれ?俺SELECT文入れたはずなんだけど。 なんでリスト画面に出てこないんだ? もう一回入力。

 db2 "select * from CYT0088"

 ・・・・・・。え?

 「0レコードが抽出されました。」

 この時点で体温が10度低下。

 あ、は、ははは。まさかな。データなくなるなんてこと。 普通そんなミスしようがないしな・・・。

 半ば神に祈る気持ちで「history」(UNIXのコマンド、 過去に打ち込んだコマンドの履歴表示をする)を入力。

146 db2 "delete from CYT0088 where APPLCODE='CSD5012'" | more
147 db2 "delete from CYT0088" |more
148 db2 "select * from CYT0088" |more

 ・・・・・・・・・・・・。脳みそに情報が到達するまで の数十秒、完全にフリーズする藤原。

 うっわあ!えらいこった!テーブル内のデータ全部 ぶち消してもたぁあ!!

 この辺がUNIXの恐いところ。めんどくさい処理 だろうがなんだろうがコマンド一発ですっきり処理できる 天国な面もある一方で、コマンド一発で地獄と化す こともある。今回のはまさに後者。

 今回、ヒストリーをカット&ペーストしてたのも敗因やね。
なんでコマンド置換使わないの?というツッコミも 入りそうだが、基本的にこのサーバは各種環境の カスタマイズ、禁止されています(泣)。当然コマンド置換の 機能もカットされてて使用不可。だからこうゆうめんどくさい 事をやってるんです。
 つまり、146のDELETE文をSELECT文と思いっきり勘違い して、ためらうことなく(しかも抽出条件わざわざ 消して)入力してしまったという訳。

 しかも今回、「どうせ更新だけだろ」となめくさってたのが災いして、 バックアップ取り忘れ。一度消失したデータを元に 戻すなんてことはもう不可能。でーたいずりむーぶおぶてーぶる。

 注意一秒怪我一生。この後が大変でしたよ。マジで。

 おろおろしてても何も事態は進展しないので、とりあえず 周りの人みんなに泣き付いて復旧要請のSOS発信。

 今回消してしまったテーブルはソフトの使用時に必ず チェックを入れるテーブルで、ここにデータが無いと エラーではじかれてまったく使用不可になる。 で、このソフトは某部署内(百代単位)全部で使われている ため、復旧までの間、一切ソフトが使えなくなるという 最悪のパターンに発展。

 とり急ぎデタラメにデータをぶち込んで、なんとか ソフトを動かせるようにはしてもらったものの、データ 全部吹き飛ばしてしまったためソフトバージョンが 一切参照できない(=バージョンアップができない)。 お願いして各開発グループに再び一からデータを入れ直してもらう。 データの内容が判明し次第、即座にデータをぶち込む。

 この作業で一日が終わってしまいました。もうぐったり。 周りもぐったり。特に事実上私の監視係になってるMさん、 一日方々に頭下げまくりだったみたいです。ごめんな しゃ〜い。

 なんとかその日のうちに自動バージョンアップの復旧まで は終わってくれましたが、それでも結局その日一日は システムダウンに等しい状態。金額換算したらどれくらいの 損失になるのか、正直想像つきません。はぁ、かなりブルーですな。 実際にミスっちゃうと。

 今回の騒動で、藤原はこうゆう書類を作成し、提出 しました。面目は詫び状ですが、実質始末書です。

 皆さん、こんな事書かなくてもいいように気を付けましょう(笑)。


 障害報告書
 報告者:藤原 宏樹

6月18日(木)15:00頃、自動バージョンアップ登録作業中、操作ミスから誤ってテーブル登録内容をすべて消去してしまいました。

ご迷惑をおかけしたことを謹んでお詫び申し上げます。

<1.経緯>
PM14:55頃、
   select * from CYT0088
とコマンド発行しようとして、
   delete from CYT0088
と発行。CYT0088内のデータ内容をすべて消去。

バックアップを取り忘れてしまったため、復旧不能に。

PM15:10頃
暫定的にテーブル内にデータ追加の要請。(**氏)
(テーブル内にデータが存在しない状態ではクライアントの ログインができないため。)

 <2.影響>
15:00までの15分間、クライアントからサーバへのログイン が不能に。その後、ログインはできるようになるものの、 クライアントの自動バージョンアップが一切不可能になる。

 <3.対応>
バックアップデータが存在しないので、アプリケーション毎に 最新モジュールの存在の確認及び再登録。

 <4.反省点>
・DB2のコンソール入力に伴うリスクの把握が不徹底だった。
・登録・変更を伴うデータベースデータの変更時の
バックアップ確保を怠ってしまった。

 <5.今後の防止策>
・データ変更に対する慎重な操作の徹底。
・極力、コンソールからの直接のコマンドの発行を控える。 別途シェルを用意し、極力DELETEなどの危険なコマンドを 不注意に発行しなくてもいいように環境を整える。

二度とこのようなミスを起こさないように気を付けたいと思います。 申し訳ございません。


あ〜あ。載せちまったい。知らねっと。


新着別 分類別
Index