【小説 失格のエンジニア】第二話 彼女には頼れない
雄一は事務室の隅に設けられた四畳半ほどのサーバ室に入った。
そこには府中屋のシステムが乗った各種サーバが所狭しと置いてある。
サーバ群はラックなどという上品なものでは無く、普通のスチール製の棚に備え付けてある。
その中の一台、データベースサーバがひときわ大きなファン音を立てている。
まるで、病魔に苦しんでいる患者が「助けてくれ」と叫んでいるかのようだ。
雄一は嫌な予感がした。
事象からデータベースが原因なのだろうとは思う。
セントライト化粧品の時に発生した障害、すなわち共有プールが一杯だった場合、対応が厄介だ。
最悪、システムの再起動をしなければならない。
恐る恐る、サーバに接続されたディスプレイの電源を入れる。
Linuxの画面が表示される。
まずは、データベースが起動しているかどうか判断するため、pmonプロセスを確認することにした。
pmonプロセスはORACLEの命とも言うべきプロセスである。
これが存在しなければ、データベースは死んでいるということだ。
恐る恐る、コマンドを打ち込む。
「ps -ef|grep pmon」
リターンキー押下。
結果が以下の通り表示された。
「oracle xxxx x.x x.x xxxxxx xxx x Ss XXXxx x:xx ora_pmon_futyu」
データベースは落ちていない。
念のため、sqlplusでデータベースに接続してみる。
「sqlplus / as sysdba」
「SQL>」プロンプトが表示され接続出来たことを確認した。
担当者を呼び、どの画面でどのデータを参照したらが落ちるのか確認した。
「商品マスタ画面......。商品マスタテーブルの参照か」
担当者が教えてくれた商品コードをキーに商品マスタテーブルを検索するSQLを実行した。
「select * from shohin_mast where shohin_cd='C10151';」
すると、以下のようなエラーが返って来た。
「ORA-01578 Oracleデータ・ブロックに障害が発生しました(ファイル番号5、ブロック番号9177)」
(何だこれは?)
初めて見るエラーコードに雄一は首をひねった。
スマホを取り出し、そのエラーコードを検索条件にgoogle先生に問い合わせた。
技術的な情報をマニュアルや個人ブログから漁る。
ORA-01578はデータファイルに関するエラーです。ORA-01578 はブロック破損を検知したときに発生します。
どのサイトにも、エラーメッセージとほぼ同じ内容が書かれていた。
つまりは、データブロックが破損していてそこに記録されているレコードが参照出来ないということだ。
ということは、そのブロックに記録されたレコードは商品コードC10151に限らず、読み書き出来ない。
「笠松部長。データが壊れています」
「何だって?」
「復旧するには、昨日のバックアップから戻すしかありません」
「そうなると、今日入力したデータはどうなる?」
「昨日の状態に戻るので今日の分は諦めてください」
「それは困るな。君、SEだろ? 何とかしろよ」
それは無理な注文だった。
(さっき、システムがダメだったら手入力で何とかすると言ったのはどこのどいつだ!?)
そう悪態を吐きたくなったが、目の前のオロオロする顧客を見て雄一は何とか出来ないかと考えた。
(そうだ!)
福島課長には止められているが、ここはやはり桜子に頼るしかない。
そう思った雄一は彼女に電話を掛けた。
<はい。もしもし>
「有馬です。今、大丈夫ですか?」
<うん。何かな?>
「あの、今、府中屋にいるんですけどデータベースのことについて......」
雄一は彼女が何かを言い返す間も与えないくらいの速さで、今の状況を一気に説明した。
どうだ、これなら答えざるを得ないだろう。
昔の血がざわついたんじゃないかい?
だが、電話の向こうの凄腕エンジニアである彼女は黙ったままだ。
(どうした!?)
ややあって、こんな答えが返って来た。
<あ、そうだ! インデックスラベルも買って来てね>
そこで電話は一方的に切られた。
「くそっ!」
雄一はスマホを握りしめ、呻った。
彼女がいればこんな障害一発で解消出来るのに。
だが、覚醒した彼女がここにいたらこう言うんじゃないだろうか?
------------------------------------------------------------------------
「いつまでも頼ってんじゃねぇよ! 自分で考えろ!」
------------------------------------------------------------------------
セントライト化粧品の時もそうだった。
彼女は最低限のヒントだけを与えて、後は雄一にどうするか考えさせていた。
今回もきっとそうなんじゃないか。
(インデックスラベル......)
さっきの電話で彼女が放った単語はこれだけだ。
インデックスとは、ORACLEのオブジェクトの一つだ。
テーブルに対して特定の列にインデックスを張ることで、検索速度の向上を図ことが出来る。
何故、インデックスが必要なのか。
目次の無い本を想像すればその必要性が分かる。
目次が無ければ、探したい項目を一ページ目から探さないと行けない。
だが、目次があればそこから一発で探したい項目のページが分かる。
データベースの場合、目次の役割をインデックスが担っている。
確か商品マスタテーブルには、商品コードをキーにしたインデックスが張られていたはずだ。
インデックスもデータブロックに格納された一種のデータだ。
さっきのSQLは商品コードをキーに商品マスタテーブルから該当データを引き当てるものだ。
(もしかして、インデックスの方が壊れていて、テーブルデータにアクセス出来ないだけなのでは!?)
そう思った雄一は、インデックスの再作成を行った。
その後、先程と同じSQLを実行したところデータはエラー無く検索出来た。
「すいません。画面から同じデータが検索出来るか試してもらえませんか?」
「はい」
担当者は返事をすると、サーバ室から出ていった。
数分後、戻って来てこう言った。
「検索できました!」
やはりそうだったかと雄一は思った。
検索する時にインデックスが存在するデータブロックを参照し、そこから検索対象のデータが存在するアドレスを取得する。
だが、インデックスが存在するデータブロックが破損していた。
だから「ORA-01578」を返し検索出来なかったのだ。
そこで、インデックスを削除し再作成を行った。
再作成することで、別の正常なデータブロックにインデックスは作られた。
これで検索が可能になった訳だ。
(だが......根本的な解決じゃないな)
今回はインデックスだから良かったが、これがテーブルデータだったらと思うとゾッとする。
破損していたブロックに存在したデータは諦めるしかない。
その辺りを強調して笠松部長に説明した。
「これを機に、リプレースを検討していただけませんか? こういうことが起きるということはもうシステムのサーバやディスクは限界に来ているのですよ」
さすがに笠松部長は考え込んだ。
そして、こう言った。
「分かった。来週の打ち合わせの時、提案書を持って来てくれないか?」
(やった!)
雄一は心の中で叫んだ。
------------------------------------------------------------------------
それから一週間は飛ぶように時間が過ぎ去って行った。
リプレースの提案書を作るためにやることが多く、時間はいくらあっても足りなかったからだ。
府中屋のデータベース設計書を見て、現行のデータベースがどうなっているか確認した。
・ORACLE9i
・シングルインスタンス
・EnterpriseEdition
割とシンプルな構成だ。
だが、一人だと心細い。
そこで、福島課長を通して桜子に協力をお願い出来ないかそれとなく訊いてみたが、あっさり断られた。
それでも何とか、雄一は過去のORACLEの経験を生かして提案書を作成した。
9iはもう古すぎる。
ここは思い切って一段飛ばしで、11gにバージョンアップする。
エディションはEnterpriseEditonのままだ。
この際、バージョンアップすることで新機能を取り入れてみたいと思った。
だが、ORACLEについてまだ十分経験が無い。
ヘタにいじって今のデータベースの状態を壊したくない。
何より期間も短いため、ここは泣く泣く現行踏襲ということにした。
業務のプログラムについては、ORACLEのバージョンアップに合わせてVB6からVB.netへのリプレースも検討していた。
この辺りの見積もりは同僚の中山に協力してもらった。
彼はセントライト化粧品の案件で忙しかったが、こう言ってくれた。
「まあ、同期が苦労してるのをほっとくのは、俺の良心が許さないんでな」
彼には、会社に対してしっかりと残業代を請求してもらうことを見返りに頑張ってもらった。
そうして出来上がった提案書を自信満々で、府中屋に持って行った。
------------------------------------------------------------------------
「あ、それね。もう必要ないから」
府中屋の情シス兼経理部長はそう言った。
先週と同じ、会議室。
雄一の努力の結晶は無造作に机の上に放り出されたままだ。
彼の目の前には、美穂と、そして......
笠松部長では無く、新しく就任した目白情シス兼経理部長がそこにいた。
目白部長は、眼鏡の奥の冷たい目を雄一に向けるとこう言った。
「あなたがたとの契約は今月までですから」
つづく