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

【小説 エンジニアの事故記録】第二十九話 魔の端末

»

 幸一郎は五階のサーバ室で、開発環境のテストデータを作っていた。

(いってえなぁ......)

 右の頬がひりひりと痛む。

 昨晩のことを思い出していた。
 怒りに燃えた渚沙の右平手打ちを頭を下げることで回避出来た。
 酔ってはいたが空手を経験していたのが活きた。
 だが、その後すぐ、アッパー気味に左の掌が飛んで来た。
 幸一郎は右の頬にその一撃をまともに受け、白い星を見た。
 脳が揺れるのを感じた幸一郎は途切れかけた意識の中で、去って行く渚沙を追い掛けていた。
 気付いたら、路上で眠っていた。
 鼻先をトラックのタイヤがかすめて行った。
 周りには激しく階段から落ちたと言い訳しているが、本当にそれで通じているのか気になる。
 福井からは「キャバクラ嬢のバチが当たったんだ」とからかわれた。

「ふう......」

 幸一郎は溜息をついた。
 酔っていて気が大きくなっていて仕方無かったいうのもあるが、渚沙を罵倒したことは後悔していた。

------------------------------------------------------------------------
「血気の勇を戒めること」
------------------------------------------------------------------------

 恩師の大山先生の言葉が胸に刺さる。
 自分を変えたいと思った矢先にこの有様だった。
 どうして自分はあんなことをしてしまったのかと、何度も悔やんだ。
 これでは渚沙に嫌われても仕方が無い。
 冷静になって考えると、渚沙が小山への投票を依頼するのは予想出来た事だ。
 それを分かっていながら、何であんなにも怒りが湧いて来たのか。

(小山のやつ裏切りやがって......)

 小山は『渚沙とは付き合わない』と言っていた。
 幸一郎の身勝手な思いだったが、それを守ってくれなかったことに腹を立つ。
 そのせいで怒りが湧いて来たのだ。

(付き合うなら付き合うで、一言、僕に言うべきじゃないのか!)

 幸一郎はそう思うと怒りに震えた。
 いきなりキスシーンをドリンクコーナーで見せつけられた幸一郎は、そのことに対して小山を問い詰めたかった。
 だが、当の小山は本社での研修だとかで、午前中はここにいない。
 毛利以外のプロパーは全員その研修に参加しなければならないらしく、渚沙もいない。
 サーバ室には本番環境に接続できる端末が一台、開発環境に接続できる端末が二台ある。
 いつも使用している開発環境接続用端末を毛利が使用しているため、使い慣れない別の端末で作業していた。
 このプロジェクトのデータベースの名前は「BELL」。
 開発も本番も同じ名前だ。
 石川が顧客の会社名「ベルルーノ」にちなんでその名前を付けた。
 開発環境データベースサーバは、本番環境データベースサーバと比較するとメモリ、ディスクサイズ、CPUなど全てが1/4スケールだ。
 費用の関係から本番同等スペックのサーバを用意することが出来なかったのだ。
 従って、開発環境データベースサーバに構築されているBELLデータベースも本番データベースと比較すと全て1/4スケールで作られている。
 ベルルーノの営業所は全国に12箇所ある。
 開発データベースに格納出来るデータ量は本番の1/4なので、幸一郎は3営業所分のデータを用意する。
 Excelマクロを使い、insert文を自動生成することで準備していた。

「さて、まずは今あるデータを消しすかね」

 幸一郎は開発環境データベースサーバにリモートアクセスするためTeraTermを起動した。
 ホスト項目には「XXX.XXX.XXX.XXX」というIPアドレスが表示されている。

teraterm1.png

 表示されているIPアドレスを幸一郎は特に確認しなかった。
 確認しなかったのには理由があった。
 幸一郎が触れている端末は開発環境接続用だ。
 そういうことから、ホスト項目には開発環境データベースサーバのIPアドレスがデフォルトで設定されているものと幸一郎は思い込んでいる。
 もしも本番環境に接続するなら、手順書を見ながらダブルチェックで接続先を確認するところだが、開発環境だからとその辺りのチェックを甘く見ていた。
 他のメンバーもそういうところがあった。
 rootユーザのパスワードを入力し、SSH接続した。
 小山が口酸っぱく言い続けている「uname -n」コマンドによるホスト名確認も怠った。
 幸一郎はBELLデータベースにsqlplusを使って接続するためコマンドを入力した。

「sqlplus xxx/xxx@bell」

 BELLデータベースに接続した幸一郎は、これからデータを投入しようとする受注テーブル「JYUTYU」の件数を確認した。

「select count(*) from JYUTYU;」

「あれ?」

 なかなか応答が返ってこない。
 いつもなら五秒ほどで件数が返ってくるのだが、三十秒近く待っても返ってこない。
 幸一郎は胃のあたりに不安からくるモヤモヤを感じた。 

「おっかしいなあ......」

 サーバに負荷が掛かっていて、それで応答が遅いのだろうか。
 そう思っていたところで結果が返って来た。

「1200000」

「120万件!?」

 あまりの件数の多さに絶句した。
 幸一郎の予想では、その1/4の30万件だった。
 4倍の120万件が返って来るなんて予想していなかった。
 誰がいつの間に作ったのか、それが気になった。

「まあ、誰かが他のデータを削除して多めに作ったんだろう」

 他のデータを削除して空を作り、一時的に大量に作った受注データが残っているのだろうと自分の中でつじつまを合わせた。
 遅れ気味な作業を進めたいがため、深く考えるのを止めテーブルデータを削除することに決めた。
 何よりテストをするためにデータを入れ替える必要がある。

「truncate table JYUTYU;」

 そう打ち込み、リターンキーを押そうとしたとき、幸一郎は思いとどまった。

(いや、まてよ......)

 JYUTYUテーブルは全国12営業所ごとの受注データが格納されるテーブルである。
 開発環境だとその1/4の3営業所の売上データが格納されているはずだ。
 1営業所当たりのデータ件数はおよそ10万件で、3営業所なら30万件程しか作られていないはずである。

(120万件ってことは12営業所×10万件ってことだ。ということは全営業所のデータがあるってことだ)

 これは開発環境じゃあり得ないことだった。
 幸一郎は不器用だが、その不器用さが功を奏して慎重なところがある。
 その慎重さが自分自身に対して、アラームをあげている。

(データを消すのはまずそうだ)

 消すと大変なことが起きるという予感がする。
 訳が分からず迷っていると端末室の扉が開いた。

「ん? どうしたんだ? ほっぺたはれてるぞ?」

 小山は入って来るなり、そう言った。
 突然の来訪に多少驚いたが、少々心細かった幸一郎は安堵した。

「研修はもう終わったのか?」

 そう訊く幸一郎に小山は頷いた。
 幸一郎は腫れた頬をさすりながら思い出した。

「......あとで訊きたいことあるんだけど」
「......分かった」

 神妙な幸一郎の顔を見て、小山は真面目な顔で頷いた。

「あと......」
「なんだ?」
「今、訊きたいこともあるんだけど」
「なんだ?」

 幸一郎は自分が座っている端末の横に小山を座らせると、今までのことを説明した。

「そうか......」

 小山は腕を組んで考え込んだ。

「どう思う?」
「どう思うって、お前が今接続してるの本番環境だぜ」
「え?」

 小山はTeraTermの画面から「uname -n」コマンドを叩いた。
 そこには「Honban_DB_Server01」と表示された。
 本番環境のデータベースサーバのホスト名だった。

「どういうことだ!? この端末は開発環境接続用のはずだ」
「お前の言っていることは確かに正しい。しかし一つ抜けがある」
「え?」

 小山は幸一郎をしっかりと見据えると、こう言った。

「開発環境接続用と言いながら、本番環境にも接続できる端末が一つだけある」

 「それがこれだ」と二人の前に置いてある端末を指さした。
 小山はそう言うと、TeraTermに「exit」コマンドを打ち込み、本番環境データベースサーバからログアウトした。
 もう一度TeraTermを起動し、幸一郎に示した。

teraterm1.png

「デフォルトで出ているXXX.XXX.XXX.XXXは本番データベースのIPアドレスだ」
「え?」

 驚く幸一郎をしり目に、小山はホスト名のプルダウンメニューを表示させた。

teraterm2.png

「このXXX.XXX.XXX.XXXの下に表示されているYYY.YYY.YYY.YYYっていうのが、開発環境データベースのIPアドレスだ」
「ああ......」

 幸一郎はYYY.YYY.YYY.YYYというIPアドレスに見覚えがあった。
 確か開発環境サーバ設定書に書いてあった。

「お前よく確認しろよ。自分がこれから接続しようとしてるサーバのIPアドレス位よ」
「だってこの端末、開発環境にしか接続出来ないって聞いてたからさ。いちいち確認しなかったよ」
「それがダメなんだよ。どんな環境だろうが自分が作業しようとしている先はしっかりと確認しろ!」

 小山は強めにそう言った。

「だいたい、何でこの端末だけ、開発と本番環境ににつながるんだよ」

 幸一郎は言い訳がましくぼやいた。

「ずっと前、この端末には注意しろってメールしたの忘れたのか?」

 小山が言うには、この端末が本番環境に接続できるのはメンバー全員周知の事実らしい。
 ただ、普段はこの端末からは開発環境にしか接続しないので、全員覚えているかどうか怪しいのだそうだ。
 確かに幸一郎も先程まで、そのことを忘れていた。

「恐らく最近、誰かがこの端末から本番環境に接続したんだろう。それでXXX.XXX.XXX.XXXというIPアドレスが残っていて、YYY.YYY.YYY.YYYの方は隠れたような形になったんだな」

 誰がやったかは分からないが、人騒がせなことだと幸一郎は思った。

「まあ、本番だろうが開発だろうが、ちゃんと接続先のサーバのIPアドレスは確認しなさいってこった。それと......」

 小山はTeraTermのプルダウンメニューから「YYY.YYY.YYY.YYY」を選択し、開発環境データベースサーバに接続した。

「接続したら自分がどこにいるか確認すること」

 そう言うとTeraTermに「uname -n」と入力し、リターンキーを叩いた。

「Kaihatu_DB_Server01」

 開発環境データベースサーバのホスト名が表示された。

「お前は本番環境だと気付くチャンスが二回あったのに、基本動作を怠けたせいでそのチャンスをフイにした」
「二回......」
「一回目は、TeraTermを起動してホスト名に表示されたIPアドレスを確認すれば気付けた」

 なるほどと幸一郎は思った。

「仮にIPアドレスを確認せずにログインしたとしても、「uname -n」を実行すれば本番環境だと気付けた。これが二回目」

 幸一郎は顔を真っ赤にしてうつむいてしまった。
 小山が依頼して来たこういった手順修正を、無駄だとか正論が過ぎるとか言って面倒くさがっていた。
 だが、何のことは無い、それを怠った自分が一番バカだったということだ。
 何より恐ろしいのは、立ち止まらず自分の判断だけでtruncateをしてデータを消していたら......ということだ。

「不器用な性格が自分を助けたな」

 小山は、幸一郎にニカっと笑いかけた。

「どういうことだよ?」
「お前は直前も直前で、データ件数の違いで開発環境じゃないかもしれないと思った訳だろ? これってなかなか用心深いことだし、エンジニアとしては必要な素養だと思うぞ。不器用なお前だから慎重になれた」
「それほめてんのか?」
「一応。データ件数でそれを推測出来たなんて、お前にはデータベースの才能がちょっとあるのかもな」

 小山はそう言うと、幸一郎の肩をポンと叩いた。
 そして、この端末の歴史について語りだした。
 この端末は二年前のシステム運用開始当初から開発、本番環境に接続出来た。
 あえてそうさせていたそうだ。
 本番環境サーバ群はこの職場から二駅先のデータセンターに行き、そこにあるコンソールからでないと接続出来ない。

「本番運用開始直後はバグや設定ミスから障害が発生しまくりだった。そのために本番環境をメンテナンスすることが多かったんだ。だが、当時のインフラチームにとってデータセンターまで移動するのは相当な負荷だったし、何より移動時間のせいで緊急対応が出来なかった。それで一台だけ、ここから本番環境に接続できる端末を用意したんだ」

 それがこれ、と言わんばかりに小山は端末を指さした。

「その後、本番環境接続用の端末が用意された。一見、開発環境接続用と本番環境接続用とで端末が別れていて安全なようだが、ところがどっこい、両方の環境に接続出来る端末もあるってこった」
「何でずっとそのままにしてるんだ?」
「当時のインフラチームは石川さん以外は皆外注でな。引き継ぐ暇無く契約上の問題で撤退して行ったんだ。本番環境サーバへのポートを塞ぐだけなんだが、今のメンバーにネットワークに詳しい者はいないし、その対応のためだけにインフラチームを費用出して呼び寄せる必要無いとまで吉田課長は言っている。そのせいで事故を誘発するような環境が野ざらしにされてるわけだ」

 小山はそう言うと、ため息をついた。

「まさに魔の端末だ」

魔の端末.png

 それは、人の油断した心にそっと潜り込む魔物のようだ。
 どんな環境でもエンジニアなら緊張感を持って臨むべきだが、それは人間である以上無理というものだ。
 だからこの端末は危険だ。
 小山は対策しろと吉田課長にずっと説いているが、聴いてもらえないでいる。

「まあ、あの人は各人が気を付ければ間違えて本番環境に接続することも無いだろうと楽観視しているからな。現にお前みたいな輩がいるのに」

 輩呼ばわりされた幸一郎は少々ムカっと来たが、今回は自分に非があるのでこらえた。
 小山のように事故防止のために働き続けるメンバーがいなくなると、その後どうなるのか想像しただけでゾッとした。
 幸一郎の様に間違えて本番環境に接続してしまう者も出てくるはずだ。
 その挙句に、本番データ消去というホームランを打ち上げれば、このプロジェクトは即解散する。

(小山がいなくなるのはまずい)

 幸一郎はその時初めて、小山がこのプロジェクトからいなくなることの危機を思った。
 色々な私情を抜きにして。

「それにしても、誰が本番環境に接続したんだ......」

 小山は顎に手を当て考え込んだ。

つづく


---------------------------------------------------------------------
※魔の端末の図について
 本番、開発共に三台のRAC構成ですが、図では一台として簡略化しています。

Comment(4)

コメント

コバヤシ

>表示されているIPアドレスを幸一郎は特に確認しなかった。
この文で「ああ、きっと本番環境なんだろうな」と思い目をつぶるような気持ちで縦スクロールを早めて読んでしまいました。
小山くん来てくれてよかったー!

VBA使い

「さて、まずは今あるデータを消しすかね」
「だいたい、何でこの端末だけ、開発と本番環境ににつながるんだよ」
→まだ酔いとアッパーのダメージが抜けてないってことで。

前作にも、開発系と本番系の接続違いのくだりがありましたね。
ひょっとして作者様は誰かの上記のようなミスのリカバリかなんかで
痛い目にお遭いになったのでしょうか。

湯二

コバヤシさん。
コメントありがとうございます。
読んでいただきありがとうございます。
先が読める分かり易い話を心がけています。
これからもよろしくお願いします。

湯二

VBA使いさん。
コメントありがとうございます。
読んでいただきありがとうございます。
アッパーのシーンは挿絵を入れたかったんで、いつか入れたいです。
>前作にも、開発系と本番系の接続違いのくだりがありましたね。
似たような事故を目撃しました。
本番環境を間違って停止させるという。
ちょうどこの話と同じような環境で起きました。
事故を起こした本人は白くなっていました。
そこから終わらない夜が始まりましたね。
こんなことは起こしてはならないと思いながら書いてます。
事故というのは起こした本人の責任じゃなく、そうさせてしまった周りも含めて原因があるのだと思います。

コメントを投稿する