常駐先で、ORACLEデータベースの管理やってます。ORACLE Platinum10g、データベーススペシャリスト保有してます。データベースの話をメインにしたいです

【小説 失格のエンジニア】第十六話 聖域の中の彼女<後編>

»

<ゲームに接続出来ないっていう問い合わせが大量に来てるんだけど? そっちで何かした?>

 美雪から電話が来た。
 作業の手を止め、桜子は応対した。

「データセンターで新しく導入するサーバの設置作業の立会をしています。何か障害が発生したのでしょうか?」

 いきなり疑いを掛けられムッとしたが、気持ちを抑え冷静に受け答えする。

「データベースを確認してくれる? なんか次から次に起きてるみたい」

 そんな曖昧な状況説明じゃ何が何やらよく分からないと思いながらも、言われた通り確認することにした。
 設置業者に一言外れることを伝え、データベースサーバの前に行きコンソールを引っ張り出す。
 電源を入れると、Linuxのログイン画面が出て来た。

(サーバの電源は落ちてない)

 oracleユーザでログインしGNOME端末を立ち上げ、sqlplusを使いsysユーザでデータベースにログインした。

(データベースは起動している)

 とりあえず、それだけでも桜子は安心した。
 報告の電話を入れようとした時、

ブルルル

 スマホのディスプレイを確認すると、それはカレンからだった。

<や、安田さん、や、や、やばいです>

 息も絶え絶えで何か言おうとしているが、余程混乱しているのか上手く状況を説明出来ないでいる。

「何がやばいの?」

 落ち着かせるために努めて優しい声で答えた。
 桜子は非常に嫌な予感がした。
 同じタイミングで来た二人からの電話。
 先程の美雪の電話と、このカレンの慌てっぷりが、どこかで繋がっているような気がしてならない。

「今日お願いされていた開発環境のデータ入れ替えで、その、やらかしたというか......」
「は?」

 泣いているのか、しゃくりあげている。
 この修羅場の様なプロジェクトで、戦力にはなっていないが人当たりが良く明るいのがカレンのいいところだった。
 だが、どこかおっちょこちょいで甘えたところがある彼女はすぐに人を頼りにする癖がある。

(そう、今回も単に操作で分からないことがあるから訊いてきているだけ......それだけのはず......)

 桜子は自分にそう言い聴かせることで自分を安心させようとした。
 カレンの話は要領を得ないので、桜子は改めて順を追って確認することにした。

「今日お願いしてた作業は、単体テスト環境で作ったデータを保守環境に入れるって作業だよね」
「はい」
「それが上手く行かなかったの?」
「はい......」
「私がいつも使ってるバッチをちゃんと、引数を間違えずに叩いたんでしょ?」
「は、はい......」

 桜子が作ったバッチは例えばAという環境にあるデータをexpコマンドでダンプという形で取り出し、それをBという環境へimpコマンドで移行するというものだ。
 もちろん、impする前にB環境のデータを削除する。

開発exp_impバッチ.png

 今回はバッチに引数として、単体テスト環境のデータベースサーバ名(tantai)と、保守環境のデータベースサーバ名(hosyu)を渡した。
 後はバッチを叩くだけで、データのお引越しを自動で行ってくれる。
 桜子は開発チームから頻繁に依頼されるこうしたデータ移行をバッチ化することで作業の手間を減らしていた。
 バッチ化した目的はそれだけではない。
 カレンの様な初心者でも対応可能にすることが目的だった。
 今日のように突然データセンターでの作業を依頼されても、カレンにバッチの場所と実行方法さえ教えて置けば事足りる。
 誰でも叩けば事が済むバッチのはず。
 それを叩いたことで何がやばいのか?

「上手く行かなかったってことは、つまり保守環境にデータが入らなかったってこと?」
「い、いえ......あの......」

 カレンがとても言いにくそうにしている。
 絶対何かが、やらかされている。

「あの、安田さんおられますか?」

 数メートル離れた場所で、内線電話を片手に作業着の男が呼んでいる。
 恐らく美雪からだ。
 携帯に繋がらないからこちらに掛けて来たのだろう。
 カレンからの電話をそのままに、桜子はその電話に出た。

<今すぐ、本番データを確認して>

 有無を言わせないほど荒れた声で美雪が指示した。
 データベースにアクセスし、適当なテーブルの件数を確認した。

「0」

 桜子は青ざめた。
 何故データが消えているのか。
 呆然とし、スマホを持つ手がダラリと垂れ下がる。

<安田さん!>

 カレンの声が聴こえる。

「本番のデータが消えている......」

 彼女にそのことを告げると

「すいません......私が実行したバッチが原因じゃないかと......」

 カレンがおずおずといった。
 カレンは移行先の保守環境のデータが何時まで経っても消えないのを不思議に思った。
 もしかしたら本番環境のデータベースを移行先として指定したと思い、本番環境のデータを確認したら全て消えていたというのだ。

「開発環境接続用の端末で作業してたんでしょ?」
「はい......」

 ならば、本番環境に接続されるはずは無かった。
 バッチが置いてある開発環境接続用端末は、開発ネットワークにあるサーバに対してのみ接続出来る。
 本番ネットワークにある本番データベースサーバへはファイアウオールの設定で接続出来ないはずだ。
 桜子は意味が分からなかった。
 単体テスト環境と保守環境という開発環境間でしかやり取り出来ないはずの環境で、なぜ本番データを消えてしまうのか?

(どうして?)

 再び内線が鳴り、取ると美雪からだった。
 桜子は現状を説明した。
 今の作業を中止し、すぐに戻って来るように指示された。


------------------------------------------------------------------------------------

 職場に戻り会議室に行くと、美雪やカレン、そしてその他のメンバーが集まっていた。
 皆、一様に憔悴しきったような顔をしている。
 ホワイトボードの前に美雪が立ち、何が起きたかを整理するため開発環境と本番環境の図を描いている。

「本番データベースのデータが全て消えました」

 図を背にして美雪がそう言った。
 ドラゴンファンタジーのデータはORACLEというDBMSで管理されている。
 データの種類としては、ユーザー属性情報、所有するアイテム情報、ユーザー認証や課金状況など多岐に渡る。
 それらが全て消えたのだ。
 ユーザにはサービスメンテナンス中ということにして利用停止を告知している。

「一体、今日何をしていたの?」
 
 攻めるような美雪の言葉に、桜子は咄嗟にカレンの方を向いた。
 彼女は顔を伏せたままこちらを見ようともしなかった。

(この子......まだ皆に自分がしたことを伝えてないのね) 

 桜子は順を追って説明した。
 昨日依頼された開発チームからのデータ移行を、カレンに依頼して自分はデータセンターで別作業をしていたこと。
 カレンの実行したバッチが直接の原因かどうかは分からないが、バッチの実行直後に本番データが消えたこと。

「私、その......安田さんに言われた通りバッチを実行しただけです。中々、開発データが消えないからおかしいと思って......。すぐにバッチを強制停止して、それで安田さんに連絡したんです」

 その頃、職場では何が起きたか分からず、皆、混乱していたようだ。
 そもそもカレンが開発環境でそういった作業をしていたことを誰も把握していなかった。
 依頼したメンバーも、彼女が今日作業を行うことを知らなかった。
 無理もない、皆、日々の業務に追われ他人の作業にまで気が回らないのだ。
 桜子だって急な作業が入らなければ、自分がデータ移行を行っていた。

「事実を整理すると、単体テスト環境から保守環境へデータをコピーするバッチを動かしたら、原因は分からないけど本番のデータが消えたってことね。それって安田さんの作ったバッチに不具合があったらじゃないの」
「待ってください。不具合なんてありませんし、バッチには本番環境に接続されるような処理は書かれていません。このバッチは何度も使用した実績あるものです」

 美雪から勝手に事実を捻じ曲げられそうになったので、桜子は反論した。

「じゃ、一体何がおかしいの?」
「それは......」
「もう一度、プログラムをいじってないか思い出してみて。良かれと思って入れた改修が思わぬ不具合を引き起こしているのはよくあることよ」

 美雪はここぞとばかりに攻め立てた。
 緊急事態なのになぜか彼女の顔には笑みが張り付いているように見える。
 コードを一行も書いたことが無い美雪にそう言われ、桜子は頭に血が上ったが冷静になろうと努めた。
 自分の作ったものに間違いはないはずだ。
 考え込む桜子を、誰もフォローしようとしない。
 カレンまでも俯いて何も言おうとしない。

(そうか!)

 桜子は思った。
 これは親会社であるアイアンキングに向けての報告書を作るための打ち合わせなのだ。
 ここで自分は犯人にされようとしているのだと思った。
 美雪は、カレンを始めプロパーたちを守ろうとしている。
 彼女に根回しされたのか、それで誰もが揃って口をつぐんでいるのだ。
 そうして事なかれを貫いているメンバーの顔を改めて見渡してみると、苛立ちを感じた。
 特にカレンに対しては恩を仇で返しているようにも見えて、苛立ちは倍増した。

(バッチは変えていない......だけど接続先が変わるということは......)

 自分の身の潔白を示さなければならない。
 桜子は閃いた。
 美雪の静止を振り切り、サーバ室へ向かった。
 数分後、一枚のプリント用紙を手に戻る。
 
「開発環境接続用端末のtnsnames.oraを変えたのは誰ですか?」

 その用紙を卓に叩き付けた。
 開発環境接続用端末のtnsnames.oraの内容が記載されている。
 桜子はそれを指さした。

「保守環境データベースの接続子であるhosyuの、HOSTの部分が開発環境データベースサーバの名前から、本番環境データベースサーバの名前に変っています」

tns.png

 メンバーの顔を見渡して、問い掛ける。
 三十秒、一分......待っても誰も手を上げない。

「あの、それとこれとにどんな関係が?」

 美雪の質問を無視し、桜子は続けた。

「HOSTの部分には接続するデータベースサーバの名称を記述します。それが開発環境データベースサーバの名前から、本番環境データベースサーバの名前に変えられています」

 沈黙が続く。

「出てこい! 勝手に環境を変えた奴!」

 桜子の見立てでは何者かがtnsnames.oraを変更したことで、データ移行先が本番に向いてしまったのだ。
 その状態でバッチが実行された。
 そして、本番データが削除された。

開発exp_impバッチ2.png

 厳しい桜子の視線に耐えかねて、一人のメンバーが恐る恐る手を上げた。

「すいません......。三日前、サーバ室から本番データベースに接続する必要がありまして。それが複数台必要で、急きょ開発環境接続用の端末を本番環境接続用として使用しました。その際、本番データベースサーバへのポートを開けて、tnsnames.oraの向き先を保守から本番に変更しました。それを元に戻すのを忘れてて......」
「一言も私に断りも無く......」

 桜子はギリッと歯噛みした。
 
「安田さん、まあ、その辺にしてください」
「は?」
「これはあなたがデータベースサーバをきちんと管理出来ていないことからくる事故だと思います」
「なんですって?」
「私はデータベースに関わること全てがあなたの管理になっている、という認識です。私以外のメンバーもです」

 美雪はカレンの方を向いた。
 頷くように促された彼女は、おずおずと首を縦に振った。

「端末にあるtnsnames.oraからデータベースそのものまであなたの持ち物です。あなたがきちんと管理しなくて誰が管理するんですか? 勝手に変更されるのが嫌だったら、申請フローを作ってあなたに全ての変更が集約するように周知徹底すればいいだけのことでしょ? 勝手に変更されたからといって、他のメンバーがこの事故の原因になったなんて言わないでください」

 桜子は驚いて何も言い返せなかった。
 元はといえば美雪のPMとしての管理が行き届いていないのも原因の一つだ。
 それを全部桜子の責任として転嫁してきた。

「それと、開発環境のデータ移行だからって手を抜かずに、どこの環境だろうが接続先を確認する手順を行っていれば今回のことは防げたはずです。いいですか? これはあなたのデータベース管理者としての不備が招いた事故です」

 会議室の空気が凍り付いた。
 美雪の口の端が笑っているように見える。

「開発環境だからって手を抜かないでください!」

 彼女の言っていることは正論だ。
 データベースに関しては桜子は自分の力だけで何とかなると思っていた。
 自分が作った聖域に人は入って来れないと思っていた。
 それだから、好き勝手やって来れたのも事実だ。
 しかし、こうして色々な人間が、分担も明確にされているようでされていない環境では自分の領分がいつ侵されるかも分からない。
 こういう環境だからこそ、備えておく必要があった。
 美雪が言うように、開発環境だからといって細かい確認を入れなかったのは桜子のおごりであり落ち度だったかもしれない。
 そして、報告書には桜子の不備であることが記載された。


------------------------------------------------------------------------------------

 長い会議の末、今後の方針が決定した。
 まず、ユーザへ無期限のサービス停止が告知された。
 次にデータの復旧である。
 遠隔地バックアップで一旦昨日20時の状態にリストアし、障害直前までアーカイブログでリカバリする。
 その手順書を手にした。

(こんなの一生使うこと無いと思ってたのに)

 データをリストア・リカバリするというのはよっぽどのことが無い限り起きない。
 信頼性を考慮してRAID組み高価なディスクを積んでいる。
 震災や火災に強いデータセンタで堅牢にデータは守られているはずだ。
 それが飛ぶというのは滅多に無いことなのだ。
 だが、人間のミスはこういった努力を無視して、全てを無にしてくれる。
 桜子は思わず「フッ」笑いが出てしまった。

「大井さん、チェッカーお願い」
「は......はい」

 桜子に声を掛けられたカレンは、ビクッとなった。

「どうしたの?」
「い......いえ......あの......」
「データベースのリストアとリカバリなんて滅多に出来る作業じゃないよ。良く見といてね」


------------------------------------------------------------------------------------

 バックアップからのリストアは三時間ほどで完了した。
 桜子はデータベースをマウント状態で起動し、リカバリコマンドで障害直前までリカバリを行うことにした。

「え?」

 途中でアーカイブログが足りないというエラーメッセージが出力された。
 アーカイブログ出力先であるNASのディレクトリに移動し、lsコマンドで確認すると確かに今日の分が無い。

「大井さん、アーカイブログが足りないんだけど」

 震える声で桜子は問い掛けた。
 隣に座っているカレンはワンピースの裾をぐっと握り、黙ったまま泣きそうな顔をしている。

(こいつ、何か隠している)

「どうしたの? 消したの!?」
「すいません!」

 彼女は、突然泣き出した。
 問い正すと、桜子がデータセンターで作業している間、アーカイブログ出力領域の使用率が100%になりデータベースが動かなくなるといったインシデントが上がったそうだ。
 だが、電話で桜子を呼ぼうにも繋がらない。
 そこで、カレンが急きょ対応することとなった。
 美雪に急かされた彼女は早くこのプレッシャーから逃れたい一心で、アーカイブログの一部を削除した。
 ディスクの容量が空き、ゲームは問題なく稼働した。

「私......パニくってたし、それに......今日バックアップから戻すなんて思っても見なかったから......」

パシイ!

 桜子はカレンに手を上げていた。
 あれほど一生懸命データベースを教えたのに......
 惨めな気持ちと、何の罪もない彼女をぶったことを後悔していた。

「あなた、何してるの!」

 それを見ていた美雪が声を荒げた。

「まったく、こんな障害を起こすは、プロパーにパワハラするは、あなた何しに来たの!? あっ、この子に手を上げたら首にされて復旧作業しなくてもよくなると思ったんでしょ。そうはいかないわよ。早く何とかしなさい!」

 桜子は目の前が真っ暗になった。


------------------------------------------------------------------------------------

「有馬さん、有馬さんってば」
「あ、はい!」

 気が付くと、カレンが雄一の顔を覗き込んでいた。
 雄一は作詞をする時、曲に登場する登場人物になり切る。
 今回は、桜子の過去を追体験するために彼女になり切った。

(これは人災だ)

 と、雄一は思った。
 

つづく

Comment(4)

コメント

atlan

tnsnames.ora ・・・同じ原因であちこちでトラブルですねぇ

湯二

atlanさん。
コメントありがとうございます。

デジャヴですね。。。
ネタが被っているとも言いますが。。。

VBA使い

高価なディスク「を」積んでいる。
リカバリ「を」行うことにした。


某Gさんのコラムばりに「安田桜子のナラティブ」ですね。

湯二

VBA使いさん。

コメントありがとうございます。
指摘について修正しました。


>某Gさんのコラムばりに「安田桜子のナラティブ」ですね。
リスペクトさせていただきました。
そのタイトルでもう一話くらいいけるかな。

コメントを投稿する