Oracleエンジニアを目指す
ORACLE MASTER Gold ポイント解説
第6回 DBA-Iの基本ポイント

小野寺智子
2003/5/28

■DBAとは

 今回からOracle9iデータベース・システム管理の基本となるDBA-Iについて具体的に解説していきます。DBAは試験時間も長く、問題数も多いのですが、「オラクルの仕組み」が理解できていれば、それほど難しくはありません。ぜひチャレンジしてください。

 それではまず、よく耳にするDBAのことを説明しましょう。DBAとはDatabase Administratorの略で、データベース管理者のことです。DBAの役割としては、ユーザーの表領域やアクセスなどの管理をしたり、トラブル発生に備えたバックアップやリカバリの計画、実施、それにデータベースの可用性を最大に引き出し、運用管理を行うことが挙げられます。

 ORACLE MASTER Goldの「PL/SQL」の試験範囲は、プログラミング経験がある人ならばさほど難しくないと思います。ところが、DBAの試験範囲は難しいと感じる人が多いようです。これが難関だと感じるのは、業務をするうえでの役割を明確に把握していないからではと思います。その場合、業務からDBAの役割を考えるようになると、何が必要かが見えて理解しやすくなると思います。

 今回の部分は、Silverの「ORACLE入門」の試験範囲も出てきますので、それを思い出しながら進めていきましょう。

■ORACLEのアーキテクチャ

 ORACLEの基本的なアーキテクチャは「ORACLE入門」で学習しました。DBAの学習ではその知識を確実にしたうえで、アーキテクチャを深く理解していく必要があります。独特なORACLEのアーキテクチャのため、理解しにくいのは事実ですが、ORACLEデータベースの運用では大切な知識なので、まずはしっかり復習しましょう。

 ORACLE入門で勉強したアーキテクチャを確認しておきましょう。

図1 ORACLEデータベースは、インスタンスというメモリ群とデータベースというファイル群から構成される

 図1から分かることですが、ORACLEデータベースは「ORACLEインスタンス」と「ORACLEデータベース」から構成されています。「ORACLEインスタンス」はORACLEを機能させるための中心部分に当たるもので、「ORACLEデータベース」はOracleを構成するファイル群です。

 では、ORACLEインスタンスに焦点を当てましょう。

 インスタンスはSGA(システムグローバルエリア)と呼ばれるメモリ部分(図2)と、バックグラウンド・プロセスから構成されています。SGAの中には「共有プール」「データベース・バッファキャッシュ」、それに「REDOログ・バッファ」があります。

 それぞれのメモリが格納している情報は、次のとおりです(表1)。なお、ラージプール、javaプールは、オプションのメモリ構造です。

共有プール ライブラリ・キャッシュとディクショナリキャッシュがあります。ライブラリキャッシュには実行計画や解析されたSQLを格納し、ディクショナリキャッシュには、最近利用したデータディクショナリの情報を格納している。
データベース・バッファキャッシュ データファイルから読み込んだデータブロックを保存しています。ユーザー・データのコピーが格納されている。
REDOログ・バッファ データベースに対して行った変更を記録する場所です。例えば、UPDATEなどの変更履歴を記録している。
表1 メモリが格納している情報

 なお、バックグラウンドプロセスは、インスタンスの起動と同時に起動するプログラム部分です。次のようなプロセスがあり、これらによってOracleは効率的なデータベース管理を実現しています(表2)。

プロセス名
概要
DBWn
(データベース・ライター)
データベース・バッファキャッシュ内で更新されたバッファをデータファイルに書き出す。このため、以降のトランザクションでも再利用できるように調整する。なお、データファイルに書き込むタイミングはCOMMITとは連動していない。
LGWR
(ログ・ライター)
REDOログ・バッファの情報をREDOログ・ファイルに書き出す。REDOログ・ファイルに書き出すタイミングは、トランザクションがCOMMITした場合などだが、ROLLBACKとは連動していない。
SMON
(システム・モニター)
インスタンスが正常に運用できるように監視するシステム。万が一インスタンスが異常終了してもシステム・モニターが回復処理を行い、正常にインスタンスを起動してくれる。
PMON
(プロセス・モニター)
ユーザー・プロセスが異常終了した場合や、障害発生時にプロセスの回復処理を行う。例えば異常終了したユーザーがトランザクション中だった場合などは、ロックの解放などを行う。
CKPT
(チェック・ポイント・プロセス)
チェック・ポイントが発生したときにデータ・ファイルと制御ファイルを更新するプロセス。チェック・ポイント・プロセスにより、ある時点でのファイルの中身とメモリの中身の整合性を保つ働きをする。
表2 プロセス名とその概要

 例えば、バックグラウンド・プロセスがどんな働きをしているのか、例を挙げてみたいと思います。DBWnがデータ・ファイルに書き込むタイミングは、COMMITと連動していないと説明しました。ですからCOMMIT済みであっても、必ずしもデータ・ファイルにCOMMITされたデータがあるとは限りません。

 もし、DBWnがデータ・ファイルにCOMMITされたデータを書き込む前にシステム・クラッシュが起きてしまったらどうでしょうか。そのような場合、Oracleは再起動を行ったときにREDOログ・ファイルの情報を見て、変更内容をデータ・ファイルに適用します。

 このようにシステム・クラッシュが起き、インスタンス・リカバリ時に実行されるデータの回復処理を行うことを「ロールフォワード」といいます。そして、COMMIT済みでないデータはUNDOセグメントの情報を見て「ロールバック」を行います。

 インスタンス・リカバリは「ロールフォワード」と「ロールバック」を行って、データを矛盾のない状態にします。インスタンス・リカバリを行っているプロセスはSMONです。

 逆にLGWRがREDOログ・ファイルに即時に書き込みを行うのはREDOログ・ファイルが障害対応の際に使用するファイルなので、即時に変更した情報を書き込まないとデータがなくなってしまう可能性があるからです。

 それから、Oracle9iからの変更点があります。Oracle8iまでは、SGAのインスタンスを停止しないとSGAにある共有プールのサイズ、データベース・バッファキャッシュのサイズを変更できませんでした。しかし、Oracle9iではインスタンスを停止せずに共有プールのサイズ、データベース・バッファキャッシュのサイズを変更できるようになりました

 そしてORACLEデータベースは、データベース・ファイルを構成しており、データファイルを操作する一連のプログラムです。オラクルのデータベースを構成するファイル群には、次に挙げるようなファイルがあります(図3)。

図3 ORACLEデータベースは、いろいろなファイルから構成される物理的な構造です

 このうち、データファイルには次の2種類の情報が格納されます。

(1)ユーザーのデータ:実際に格納されるデータ。例えば社員番号や名前など。

(2)システムデータ:データベースの管理のために必要なデータ。例えば、データベースオブジェクトが使用する領域の物理量やデータファイルの個数、所在、最後に使用し日時などのデータ。データファイルは表領域によってグループ化します。

 REDOログ・ファイルは、データベースに対して実行される変更やトランザクションを記録します。REDOログ・ファイルには、トランザクションのコピーが常に記録されています。REDOログ・ファイルは循環して使用されるので、最低でも2つのファイルが必要です。

 制御ファイルは、データベースすべてのファイルに関する重要な情報を格納したファイルです。制御ファイルが有効でないと判断するとデータベースは起動しません。一例として、制御ファイルは「データベースの名前」を格納しています。起動しようとしたデータベースと、制御ファイルに格納しているデータベースの名前が一致しなかった場合などは起動せず、エラーになります。

 初期化パラメータ・ファイルは、インスタンスを起動するときに必要なファイルです。パラメータ・ファイルの情報を基にインスタンスが起動します。

 パスワードファイルは、インスタンスの起動・停止が行えるDBAユーザーを認証するためのファイルです。

 アーカイブ・ログ・ファイルは、REDOログ・ファイルのコピーです。

■PGA(プログラムグローバルエリア)

 SGAとは、インスタンスと呼ばれるメモリ領域のことでした。PGAは、クライアント/サーバプロセス内のメモリ構造のことです(図4)。そのため、PGAはセッションを確立されると割り当てられ、サーバプロセスやバックグラウンドプロセスごとに確保されます。しかし、共有するメモリ領域ではありません。

図4 PGAは、個々のサーバプロセスが使用する非共有のメモリ領域

 PGAには次のような要素が含まれます(表3)。

スタック領域 ログインの情報(セッション変数ともいう)を格納。
セッション情報 セッションで利用される情報、例えばセッションユーザーの
権限などを格納。
カーソルの状態 現在のセッションで使用しているカーソルの情報を格納。
ソート領域 ユーザーがORDER BYなどのソート処理を要求したときに
使用される領域。
表3 PGAの要素

■SQL文の処理

 これまで解説してきたようなアーキテクチャを理解したうえで、実際にSQL文が内部的にどのような処理を行っているのかを知る必要があります。DML文がOracle Server内でどのように処理されているのか、COMMIT処理はどうなっているのか、最後に確認しておきましょう(図5)。

図5 DML文の処理

 図5の処理は、次の順番で処理されます。

  1. ユーザー・プロセスの要求をサーバプロセスが受け取ります。
  2. サーバプロセスは、共有プールに以前実行したSQLがないかを確認します。あった場合は再利用します。
  3. 以前実行したSQLがない場合は、実行計画を立てて共有プールに保存します。
  4. SGAをチェックして該当データがデータベース・バッファ・キャッシュにあるかどうかを確認します。
  5. データベース・バッファ・キャッシュにデータがなかった場合は、データファイルに存在している表の中のデータをデータベース・バッファ・キャッシュにロードします。このとき、UNDOセグメントがあるかどうかもチェックします。
  6. データベース・バッファ・キャッシュ上の変更するデータに対して「ロック」をかけます。
  7. 変更の履歴(変更前のデータ→変更後のデータ)をREDOログ・バッファに記録します。
  8. 変更前のデータをデータベース・バッファ・キャッシュ内のUNDOセグメント内の該当する行データを書き換えます
  9. 処理が終了したことをユーザー・プロセスに報告します。

「連載 ORACE MASTER Goldポイント解説」

自分戦略研究所、フォーラム化のお知らせ

@IT自分戦略研究所は2014年2月、@ITのフォーラムになりました。

現在ご覧いただいている記事は、既掲載記事をアーカイブ化したものです。新着記事は、 新しくなったトップページよりご覧ください。

これからも、@IT自分戦略研究所をよろしくお願いいたします。