第1回:Oracleとの出会い

DBAへの道

はじめまして。
株式会社システムエグゼ データベースソリューション本部の藤林と申します。
今回より「DBAへの道」というタイトルで、今まで私がORACLE DBAになるために歩んできた過去の経験を、お話しして行きたいと思います。

ORACLEとの出会い

私が初めてORACLEに出会ったのは10年以上も前になります。
その頃はまだORACLE7の時代で、私は開発者としてPowerBuilderからORACLEデータベースにアクセスするのみといった、DBAとは程遠い世界にいました。
当然その時には、このORACLE7を構築していた方がいた訳ですが、どのように構築しているかなどは、多少の興味はあったものの、アプリケーション開発者だった私にとっては、関係の無い世界でした。

ところが、時は2000年1月。
2000年問題が一段落したシステム業界で、私にとっては今後の人生の転機とも言える事件が発生しました。
某大手お客様の運用チームに、ORACLE担当に欠員が発生したため、以前にORACLEに関係した事があるという理由で、ORACLE担当として運用チームに抜擢され参画する事となったのです。
本番運用に関わるチーム人数は100名を超えた巨大なシステムだったと思います。ORACLE担当の業務は、UNIX上で稼動するORACLEデータベースの障害対応・予防保守・技術支援が主なものでした。

「ORACLEに関係した事があるとはいうものの、開発で使っただけ、しかもUNIXに触るのも初めてな私が、このような巨大システムの運用がまともにできるのだろうか?」と、不安に感じながらのスタートとなりました。
私は元々大型汎用機の開発者としてコンピュータに関する経験を積んでおり、大型汎用機の世界でもRDBは存在していたため、RDBの基礎は理解しているつもりでしたが、この知識が本当に役に立つのかという日々でした。

「REDO」はどう読む?理解を深めるために取った行動とは

ORACLE担当は3人チームで対応していました。現担当者から「まずはORACLEの基礎から勉強をして下さい」との指示をもらいました。書棚には大量のマニュアルがあり、まずは「Oracle8 Server概要」から読み始めました。

意外とチンプカンプンにならずに読むことができましたが、どうしても専門用語の発音がわかりません。例えば「REDO」ですが、「レド?」で良いのかわからないので、どうしようかなと思いました。
しかし周りの会話を聞いていると、このような専門用語が飛び交っているので、ORACLEの勉強をしながらも、周りの会話に耳を傾けるようにしました。
1ヶ月が経過し、多少ではありますが、専門用語(発音も含め)も理解してきました。インスタンス、SGA、バックグラウンドプロセス、REDO、ロールバックセグメント・・・・。

次に手がけたのがUNIXの基礎です。
全くUNIX機に触った事が無かった私に、まず薦められたのはUNIXコマンド集の本の購入と、自宅にLinux環境を構築することです。
基本的なUNIXコマンドは何となく理解できましたが、UNIX自体の構造が良くわからなかったため、自宅にLinux環境を構築してみる事にしてみました。

当然Linuxの導入などという経験は無かったので、専門書を購入してのトライとなりました。カーネル、シェル、パーミッション、環境変数・・・未知の言葉ばかりで大変苦労しましたが、数日がかりで何とかLinuxを導入する事ができました。元々自宅のPCは自作機で、windows環境(98とか2000Proですが)も自分で構築していましたので、インフラ作業はあまり苦になりませんでした。

せっかくLinux環境ができましたので、ここにORACLEを導入してみようと思いました。
ORACLE8iのトライアル版がちょうどあったので、とりあえずインストールをしてみようと思いました。ORACLEのインストレーションマニュアルを参照しながら実施すると、以外とすんなりインストールできました。
しかし、今思い返すと、カーネルパラメータの設定とか、マウントポイントの作成とか、グループの作成とか、全く理解していない状態でインストールしていました。この頃は余裕が無く、適当にごまかしていたように思えます。

本業では、パフォーマンスの問題やら、データ破壊やら色々な問題が発生していました。
V$表・ディクショナリを駆使しながら、様々なデータを採取し、解析をしていました。当然まだまだこの辺りの話題には入っていける状況ではありませんでした。
しかし近い未来には、主担当として作業を行う必要があると認識していました。

実践!マニュアル活用

ORACLE担当として運用するサーバで、特に重要なシステムがOracle Parallel Server(通称OPS)でした。現在のReal Application Clusters(通称RAC)の前身であり、採用している企業は少なかったと思います。
通常のシングルインスタンスもまだ良く理解していなかった状況のうえ、OPSとなると複雑な機構となっており、対応が非常に大変でした。

ORACLEを理解するためにやはりマニュアルは不可欠で、特に初期化パラメータ・データディクショナリ・v$表・待機イベントなどが記載されているリファレンスマニュアル(Serverリファレンス・データベースリファレンス)は非常によく参照しました。
ORACLEのマニュアルを全て理解し記憶できれば良いのですが、私にはそのような能力はありませんので、どのマニュアルにどのような内容が記載されているのかを覚える事にしました。膨大な量のマニュアルを参照する必要がありました、だんだんと使用するマニュアルが限られてくると考えました。
ORACLEの知識は、日々のトラブルシュートなどでだんだんと理解できてきました。

しかし、UNIXの知識が乏しい私にとって、あらゆる情報を採取するシェルスクリプトを覚える必要がありました。
そこで、まずは既存で動いているシェルスクリプトを参考に解析をしてみたのですが、正規表現という言葉すら知らなかった私は、シェルスクリプトを見た時、文字化けしているのではないかと目を疑いました。
皆さんはご存知だと思いますが、「?」とか「$」とか訳の分からない文字が記述されており、初めて見たときは非常に戸惑った記憶があります。

新たなる壁の予感

仕事場にはORACLE担当以外に様々な運用チームがあり、その中でも、障害が発生した際に一次切り分けを行うチームと良く連携を取っていましたので、シェルスクリプトについては、このチームの方を勝手に先生にし、色々と教えてもらいました。 元々プログラマを行っていましたので、それ程苦にはなりませんでしたが、正規表現については何となく理解しづらかったように思います。

ORACLE担当として運用していく日々。
そんな中で、ORA-600というキーワードが大変多く出現しました。
ORACLEに詳しくなくてもORA-600を理解している方は多いと思いますが、ORA-600が発生した際の他のORACLE担当の顔を見ていると、非常に面倒くさいエラーなんだと、分からないながらもある程度状況は理解できました。