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

【小説 エンジニアの事故記録】第三十五話 答えは前にある

»

 幸一郎は、毛利の方を見た。
 だが、彼は特に幸一郎の視線にも気づいていないようだ。
 自分のパソコンのディスプレイに向かったままだ。
 そう言えば彼は朝から開発室にずっといる。
 本番環境に何かを仕掛けることは出来ないはずだ。

(やはり、奴らの攻撃は来週月曜日と固定されている? ......とすると、今起きているこのインシデントは攻撃でなく障害......ということになるのか?)

 以前、渚沙に言われたように一回大きく深呼吸をすると、混乱した頭が多少冷却されたのか気持ちにも落ち着きが戻りつつあった。
 データベースを引き継いだばかりの幸一郎にとって、トラブルシューティングは初めてだった。
 データベースには設計、構築、運用など様々な作業があるが、特にこの障害対応というのは厄介だ。
 客や仲間たちの厳しい視線に晒されながらプレッシャーの中、解決の糸口を見つけ出し素早く復旧させなければならない。
 この状況下で、石川のように自分の技術力を発揮出来ると張り切る強者もいるが、それは彼女が一定の技術水準に達した余裕のある熟練者だからである。
 幸一郎のように技術力に疑問符がある者は、この騒然とした事態に飲み込まれて浮足立ってしまう。

「もしもし、石川さんですか?」

 幸一郎はやっと電話が彼女に繋がり、安堵した。

<何? どうしたの?>
「その......データベース障害が発生しました。在庫確認画面で一覧表示ボタンを押すとエラーが出て処理が止まるそうなんです」
<具体的な処理は訊いた? 例えばどんな検索条件だとエラーが出るかとか>
「い、いえ......」
<まずはそこからね。業務担当にそれを確認して。分かったらまた電話してちょうだい>

 電話は切れた。
 出来れば幸一郎はこのまま石川と電話で繋がったまま対応したかった。

「大竹君!」
「は、はい!」

 振り返ると、渚沙が横に立っていた。
 その後ろに設計書と思しき紙の束を持った高田がいる。

「在庫確認覧画面のことなんだけど......設計して作ったのは高田さん。それを引き継いで改修を入れたのは私なの」
「あ......」

 幸一郎は我に返った。
 石川にアドバイスされたように、まずは業務にどういう操作をしたらエラーが発生するのか訊くべきだ。

「すいません、エラーが起きる条件というか、処理を教えてくれませんか?」
「えっとね......在庫確認画面っていうのは名前の通りお客が管理している在庫を確認する画面なんだけどね。条件指定して一覧表示する機能があるんだ。その一覧表示機能が動作するのは一覧表示ボタンを押した時で、さっきお客さんから電話で聴いた話だと一覧表示ボタンを押した時にエラーが起きるんだよ」

 高田は設計書に載っている在庫確認画面の図を見せながら、幸一郎にざっくりと説明した。
 五十代目前の彼は立っているのがしんどいのか近くの椅子を引き寄せ、幸一郎の横に座った。

「ボタンを押した時に毎回起こるんですか?」
「いや、毎回じゃないらしいんだ。数回に一回は一覧がキチンと表示されるらしい」
「ええ......?」

 幸一郎は混乱した。
 毎回失敗してくれた方が分かり易いし、その方が問題の切り分けも出来そうだと思っていた。
 だが、ランダムに発生しているような場合、尻尾を掴みにくい。
 調査と対処が厄介だということは容易に想像出来た。

「おい、早く何とかしてくれないか!?」
「は、はい......」

 横から吉田課長に怒鳴りつけられた。

「データベースは君に任せたんだから、石川に頼らずまず手を動かしてくれないかな。客からは後三十分後には復旧してくれって言われてるんだから」

 普段は穏やかな吉田課長だが、有事の際はそんな雰囲気もどこかに飛び去っていた。
 厳しい顔で幸一郎を叱責してくる。
 確かに幸一郎はDBAになった。
 だが、それは数日前のことで、それまではSQLを組んだりテーブルを作るといった開発よりの事ばかりやって来た。
 いきなり障害対応何て出来るはずも無かった。

(逃げたい......)

 幸一郎は心底そう思った。
 これほどのプレッシャーの中で、今までずっと石川は仕事してきたのかと思うと尊敬の念すら覚えた。
 と同時に、自分にはとてもそんなことは務まりそうも無いと思った。
 吉田課長はDBAの仕事が、これほどの大変だということが分かっていたのだろうか。
 石川をずっと専任でデータベースを担当させる方がプロジェクトとして安全なのが分かっていながら、小山を追い出すために幸一郎をDBAにするという体制にしてしまったのではないか。
 来週月曜日はこれより凄いことが起こることが分かっている。
 小山はそれに男らしく立ち向かえと言うが、そんなの無理だ。

「大竹君」
「は......はひ......」

 幸一郎の肩に柔らかい肌の感触が伝わった。
 見てみると、小さな渚沙の手が添えられていた。

「大丈夫だよ。私たちも協力するから。ねっ、高田さん」
「まあ、大竹君をDBAにしたのは私たち年配者のせいでもありますからね。一緒に何とかしましょう」

 地獄に仏を見たような気がした。
 幸一郎を裏切り者呼ばわりしていたはずの渚沙は優しく女神のように微笑み、高田は年の功からか余裕の横顔を見せている。
 それが、一人不安でいっぱいだった幸一郎を温かく包み込んだ。

「水谷しゃん......、高田しゃん......」

 泣き出しそうになる幸一郎を後に、二人は急いで五階のサーバ室に向かって行った。

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

 本番環境のみに接続出来る端末に向かい、調査を行う。
 まずはTeraTermを起動し、本番データベースサーバに接続した。
 そして、電話の向こうにいる石川に現状の報告をした。

<ふむ......大竹君、それじゃalertログを確認して見て>
「えと......場所は?」
<君ねぇ......>

 口調から、石川が呆れているのが分かる。
 彼女はalertログが配置されているディレクトリの場所を伝えるとこう言った。

<そのログをtailで追い続けて>
「テ......テイル......?」
<もう、そのくらい自分で調べて!>

 彼女はそう言い残すと電話を切った。
 渚沙が幸一郎の肩をポンポンと叩き、ディスプレイを指さした。

「tail -f /u01/app/oracle/diag/rdbms/BELL/BELL1/trace/alert_BELL1.log」

 TeraTermの画面にはそう入力されていた。
 渚沙は、幸一郎と石川のやり取りを横で聴いていて、その内容を元にコマンドを作成したのだろう。
 幸一郎にリターンキーを押すように促して来た。
 リターンキーを押すと、画面にalertログの最新部分100行が表示された。
 そこには大量の「ORA-01652:一時セグメントを拡張できません」というエラーメッセージが出力されていた。
 画面には次々そのエラーが出力されている。
 データベースサーバは三台あるが、そのいずれも同じエラーをalertログに出力し続けている。

「やばくね......これ?」

 その様子を見て高田はつぶやいた。
 先程まで余裕の表情だったが、事態を重く見たのか青くなっている。
 幸一郎もつられて青くなる。
 この後どうしていいか分からない。
 石川にも電話が繋がらない。
 そんな二人をしり目に、渚沙はTeraTermを立ち上げ本番アプリケーションサーバに接続した。
 アプリケーションログをtailで開き、モニタリングする。
 そこには定期的に画面から実行されたSQL文が出力されている。
 その中から在庫確認画面から発行されたSQLを探しているようだ。

「在庫確認画面からSQLが発行されると、alertログにORA-01652が出力される。この時、SQLが失敗しているのは分かる......。ただ、上手く行っている時もある」

 渚沙はポツリと言った。

「え?」

 その呟きに幸一郎は反応した。
 幸一郎はアプリケーションログのSQLをじっと見た。
 そこには特徴が見られた。
 SQL文には出力結果をソートするためにORDER BY句が付与されている。
 ORDER BY句に項目が沢山設定されているSQLは、ORA-01652を発生し実行が失敗しているように見える。

「水谷さん、画面からちょっと試してもいいですか?」
「いいよ」

 渚沙はデスクトップに置いてある「婦人服通販・売上管理システム」のアイコンをクリックしシステムを起動した。
 ログイン画面が表示され、そこに管理者用のIDとパスワードを入力してログインした。
 トップのメニュー画面から一気に在庫確認画面まで遷移する。

「はい、どうぞ」

 渚沙は幸一郎に操作を引き渡した。
 幸一郎はアプリケーションログに流れているSQLの通りに検索条件を指定し、一覧表示ボタンを押した。
 その際、ソート条件は「仕入日」一つだけを指定した。
 数秒後、画面に一覧が表示された。

「お、上手く行く」

 次に検索条件は同じだが、ソート条件は「仕入日」、「数量」、「名称」、「仕入値」、「担当者」と選択出来る限りのものを設定し、一覧表示ボタンを押した。
 数秒、数分待っても結果が返って来ない。
 周囲に緊張が走る。
 十分後、応答メッセージが返って来た。

「処理がタイムアウトになりました」

 画面にエラーメッセージが表示された。
 alertログを確認すると同じタイミングで「ORA-01652:一時セグメントを拡張できません」が出力されている。

「ソート項目を大量に指定すれば発生するようです」

 事象の切り分けが出来、解決に近づいたせいか周囲に多少の安堵感が漂った。
 ORA-01652は一時表領域が足りなくなったときに発生するエラーだ。
 一時表領域はソートを伴う処理がPGAというメモリで完結出来ない場合に使用される。
 ソート処理とは、テーブルの結合や、ORDER BYやGROUP BYを使ったSQL文を発行した時に行われる。
 今回の場合、ORDER BY句に設定したソート項目の多さによって、ORA-01652が発生したり発生しなかったりする。
 そこに目を付けた幸一郎は上記のような実験を行い確証を持った。

(一時表領域が足りない。少数のソート項目だと足りるが、多数のソート項目を処理するための一時表領域が足りないからエラーが発生してるんだ)

 「仕入日」だけで数万件のデータを並べ替えるのと、「仕入日」、「数量」、「名称」、「仕入値」、「担当者」で数万件のデータを並べ替えるのとでは消費する一時表領域の量が違う。
 もちろん後者の方が大量の一時表領域を消費するのは言うまでも無い。

「自由にソート項目を選べる機能って、確か昨日リリースした機能ですよね」

 渚沙が高田に問い掛けた。

「そうだね。そう言われると昨日までこんなエラーは起きてなかった。新しく追加した機能が原因と考えるのが自然だ」
「え? じゃ私の作った機能が原因でORACLEのエラーが出てるの?」

 渚沙が青ざめた。
 新機能として追加されたソート機能をユーザが一斉に使ったことで一時表領域が足りなくなっていると思ったのだろう。
 今現在の一時表領域の容量は20GByte程だがそれでも足りないということだ。
 幸一郎は原因が分かったことで多少気は楽になったが、その後の対処をどうすべきか考え込んだ。
 その時、サーバ室の扉が開き吉田課長が入って来た。
 その後ろに続いて、見たことも無い色白の小太り男が入って来た。

「今、鋭意調査中でございます」

 吉田課長は愛想笑いを浮かべながらその男に、幸一郎たちを指し示した。
 その男は、その言葉を無視するように苛立ったようにこう言った。

「早く復旧してくださいよ。現場から早く使いたいって電話がジャンジャン来てるんだから!」
「すいません、富永さん。大竹君。どうかね?」

 富永と呼ばれたその男は首からパスカードを下げていた。
 そこには「株式会社ベルルーナ 情報システム部 富永」という文字が書かれている。
 「ベルルーナ」の本社はこの職場から歩いて二十分のところにあるが、そこから急いで来たのだろう。
 額の汗を見れば分かる。
 事態はそれだけ重いということだ。
 突然、お客さんを目の前にして幸一郎は緊張した。

「あ、あの、えと......」

 幸一郎は自分が調査したことをしどろもどろに説明した。
 富永はしかめっ面で目を閉じ腕を組んだまま、聴いているのか聴いていないのか分からない態だ。
 ただ、表情から苛立っているのだけは良く伝わる。

「まあ、技術的な話はよう分からんから、それはあなた達でよろしくやってくださいよ。こっちは何時に復旧するかが知りたいのであって、べつに技術的な横文字が聴きたいわけじゃないんでね。吉田さん、約束の時間まであと五分ですよ」

 富永は吉田課長を叱ることで、暗に幸一郎にプレッシャーを掛けて来ている。

「はあ、すいません。大竹君、あとどれくらいで復旧出来るんだ」
「い、いえ、その......対処をどうしようかと......」
「対処も何も、一時表領域が足りないなら増やせばいいだけだろ?」
「は、はい。ですが今やっていいものかどうか......」

 幸一郎はオンライン時間中であり客が使用中のデータベースに対して、一時表領域を増やすという操作を行っていいものかどうか迷っていた。
 そもそも、一時表領域を増やすための空きがディスクにあるのかも分からないし、確かめる方法も知らない。
 ましてや、どれくらい一時表領域を増やせばエラーが出なくなるのかも分からない。

「それを判断するのもDBAとしての君の仕事だろう!? ちゃんと石川から引き継いだんじゃないのか?」

 血相変えて声を荒げる吉田課長に幸一郎はビビった。
 まるで客の前で自分の体面を保つために幸一郎を厳しく叱責しているようも見える。
 余りの人の変わりように声が出ない。

(小山だったら、こんな時、一緒に考えてくれるんだろうなあ)

「まったく、そう言えば小山君はどうしたんですか? 突然挨拶のメールだけでいなくなってしまった。彼が頑張っていてくれたから最近こういったことも少なくなって来たと安心していたのに」

 富永は吉田課長に向かって腹立たしげにそう言った。
 そうだ、そうだと、幸一郎も思った。 

「申し訳ありません。その分、大竹が何とかしますので......」
「あの......大竹君はまだ......」

 渚沙が吉田課長に何か反論をしようとしたが、やめた。
 客の前で言い合いになるのは不適切だと判断したのだろう。
 その時、サーバ室の扉が開いた。

「大竹君! どう!?」

 肩で息をしながら石川がサーバ室に入って来た。

「石川さぁん!」

 幸一郎は緊張していたものが一気に解きほぐされ、涙腺がぐずぐずに緩んでいくのが分かった。
 周囲も石川が来たことで気持ちに余裕が戻って来たようだ。
 よく見ると彼女のメガネレンズは割れていた。
 髪もいつもはしっかりと後ろで結んでいるが、振り乱したかのようにぼさぼさだ。
 その姿から彼女がシステム、そしてデータベースを復旧させるためにどれだけ急いで来たかが良く伝わった。
 幸一郎は泣き出しそうになった。

「急いで来たから」

 ゼーゼー言いながら幸一郎の隣に座った。
 幸一郎は状況とエラーの原因を石川に説明した。
 彼女はすぐ理解するとASMディスクの空き状況を調べ、後どれくらい一時表領域に使えるか調査した。

「100GByte程余りがあるから、その半分の50GByteを一時表領域に割り当てる。それでまず様子を見ましょう」
「いいんですか? そんなざっくりした感じで」
「今は復旧させることが優先よ。足りなければ10GByteずつ割り当てて行きましょう」

 吉田課長は「石川は慎重過ぎていかん」と評していたが、そんなことは無いと幸一郎は思った。
 状況によって慎重さと大胆さを織り交ぜて適切な判断をしている。

「ユーザが使ってる時にデータベースに変更を加えても......大丈夫なんでしょうか?」
「多少サーバに負荷は掛かるけど、今からユーザに使うなって周知してる時間なんて無いでしょ。失敗したからってデータが壊れることは無いから。兎に角やってみてダメだったら謝るだけよ」

 そう言いながら彼女は一時表領域を拡張するコマンドを組み上げて行った。

「止まってる暇ないよ。泥臭く色々試して前に進むしかないんだって」

 彼女はそう言うと、組み上げたコマンドを確認しリターンキーを押した。

つづく

Comment(0)

コメント

コメントを投稿する