TOP > Oracleアーキテクチャ

Oracleアーキテクチャ


Oracleとは

Oracleは、リレーショナル・データベース管理システム(RDBMS)、つまり、リレーショナル型データベースを、コンピュータを使用して管理・運用するためのソフトウェアのことである。
通常、Oracleというソフトウェアが稼動しているコンピュータに対して、複数のコンピュータがネッワークを介してアクセスし、Oracleの管理しているデータを利用する。


ユーザプロセスとサーバプロセス

Oracleサーバにユーザがアクセスすると、ユーザプロセスサーバプロセスが作成される。その後、両プロセスの接続が確立され(この両者の特定の接続をセッションと言う)、サーバプロセスがOracleサーバと通信する。

一般に、データを利用する側のコンピュータでは、SQL*PlusのようなSQLコマンドを送信するアプリケーションや、Developer/2000で作成されたGUIのアプリケーションなどが稼動している。ユーザがこれらのアプリケーションを起動すると、ユーザがログインしているマシン上にユーザプロセスが作成される。

サーバプロセスは、Oracleサーバが稼動しているマシン上で動作する。ユーザプロセスの要求に応じて、Oracleサーバと通信し、処理ステータスと結果をユーザプロセスに返す。
その際、サーバプロセスはプログラム・グローバル・エリア(PGA)というメモリ領域を使用する。PGAは、毎回のサーバプロセス作成時に割り当てられ、プロセス終了時に開放される、書き込み可能な非共有領域である。

ユーザプロセスとサーバプロセスの関係:
専用サーバ構成の場合・・・1対1。つまり、10ユーザが1つのアプリケーションを起動すると、10ユーザプロセスとそれに対応する10サーバプロセスが起動する。
マルチスレッドサーバ構成の場合・・・N対M。複数のユーザプロセスで、一つのサーバプロセスを共有することができる。


Oracleを構成する要素

Oracleサーバは、データベース名(DB_NAME)で識別されるOracleデータベースと、
[Oracle 8i (リリース8.1)以降] グローバル・データベース名(データベース名.ドメイン名)。合計128文字、データベース名は8文字以内
[Oracle 8 (リリース8.0)以前] ORACLE_SID (システムID)
で識別されるOracleインスタンスによって構成される。

OracleデータベースとOracleインスタンス

●Oracleデータベース

オペレーティングシステムファイル(要するに物理ファイル)からなる物理構造で、データベース自体を格納するデータベースファイル以外にも、REDOログファイル、パラメータファイル等から構成されている。
詳細は下記「1.ファイル群」参照。

●Oracleインスタンス

システム・グローバル・エリア(SGA)というメモリ構造と、Oracleサーバがデータベースを管理する際に使用するバックグラウンド・プロセス群から構成されており、Oracleサーバが稼動しているマシンのメモリ上に割り当てられる。
SGAとバックグラウンド・プロセス群は、1つのインスタンスに1セットずつ割り当てられる共有領域であり、インスタンス起動時に確保される。
詳細は下記「2.メモリ領域、3.バックグラウンド・プロセス群」参照。


1.ファイル群

ファイル名 内容
データ・ファイル 表領域と対応づけられているファイル。
表、索引などのすべてのデータベース・データとデータの構造、システム管理情報が格納されている。つまり、表や索引と表領域の対応はN:1である。
そのため、開発者やユーザはファイルの位置を意識する必要はない。
REDOログ・ファイル ディスク障害等、障害発生時に備えて、データベースに対して行われたすべての更新情報が記録されているファイル。
更新したデータがデータ・ファイルに書き込まれていなかった場合でも、REDOログ・ファイルから更新情報を取得してデータが復旧できる。
制御ファイル

データベースの整合性を維持するため、データベースの現在の状態や、物理構成が記録されているファイル。

  • データベースの名前
  • データ・ファイルの名前と位置
  • REDOログ・ファイルの名前と位置
  • データベース作成時のタイムスタンプ

を管理している

パラメータ・ファイル データベースの様々なパラメータを設定するファイル。
データベース管理者が、Oracleデータベースの調整を行なう際に編集する。編集後は該当Oracleインスタンスの再起動が必要。
パスワード・ファイル 管理用データベースユーザを認証する際に使用するファイル
アーカイブ・ファイル REDOログ・ファイルのバックアップ・ファイル(オフライン・コピー)。
これは、Oracleの運用には必須ではないので、運用方法によって取得するかどうか決定する。

上記ファイルのなかで、データベース管理者が直接編集できるのはパラメータ・ファイルだけである。それ以外は、Oracleプロセスが自動的に管理する。


2.メモリ領域

システム・グローバル・エリア(SGA)

メモリ領域 内容
データベース・バッファ・
キャッシュ
SQL文の処理を、ファイルではなくメモリ上で行うことで処理効率が向上させるため、データ・ファイルからのデータが格納される。格納単位はOracleブロックである。

ユーザから処理要求があった場合、サーバプロセスは始めにSGA中のデータベース・バッファ・キャッシュをチェックし、データがない場合に初めてデータ・ファイルを検索しに行き、取得したデータをキャッシュに置く。
すなわち、検索・更新などの処理は、全てメモリ上のデータに対して行なわれ、その内容はDBWRプロセスによって定期的にデータ・ファイルに反映される。

1Oracleブロックのサイズはパラメータ=DB_BLOCK_SIZE、ブロックの数はDB_BLOCK_BUFFERSで指定する。
REDOログ・バッファ データベース・バッファ・キャッシュに対して行われた変更処理の情報(ログ)が格納される。
その内容はLGWRプロセスによって定期的にREDOログ・ファイルに反映される。また、ユーザからのコミット要求の際にもLGWRプロセスはREDOログ・ファイルに書き込む。
共有プール ライブラリ・キャッシュ:直近のSQL文のテキスト、SQLを実行するための解析ツリーや実行計画が格納される。

データディクショナリ・キャッシュ:直近に使われたデータ・ディクショナリ、ユーザ名、パスワード、権限などの情報も格納されるので、サーバプロセスは、SQL文解析時に、ここから表や列の定義を取得したり、権限のチェックを行なったりする。

処理効率を良くするために、上記の情報は、他のユーザでも利用できるよう共有プールに格納される。メモリがいっぱいになった場合は、Least Recent Usedアルゴリズムにより削除される。

共有プールのサイズは、パラメータ=SHARED_POOL_SIZEで指定される。

SGAの各領域のサイズは、パラメータ・ファイルによって指定される。

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

メモリ領域 内容
ソート領域 行を処理する前、または行をユーザに戻す前に必要なソート処理で使用される。
ソート領域 行を処理する前、または行をユーザに戻す前に必要なソート処理で使用される。
その他 セッション情報(セッションに対するユーザ権限などの情報)、
カーソルの状態(セッションで使用しているカーソルの処理段階を示す情報)、
スタック空間
(セッション変数を格納する空間)が含まれる。

PGAの領域のサイズは、Oracleが自動的に決定する。データベース管理者が指定することはできない。


3.バックグラウンド・プロセス群

データベース起動時に必ず立ち上がるプロセス

プロセス名 内容
DBWR
データベース・ライター
SGA内のデータベース・バッファ・キャッシュで変更された内容を、データ・ファイルへ書き込む。
LGWR
ログ・ライター
SGA内のREDOログ・バッファの内容を、REDOログ・ファイルへ書き込む。
CKPT
チェック・ポイント
チェック・ポイントが発生した時に、DBWRプロセスにシグナルを送り、データ・ファイルのヘッダー情報と制御ファイルを更新する。
また、CKPTプロセスが起動していない場合には、LGWRプロセスが代わりに行う。
SMON
システム・モニター
Oracleシステム全体を監視する。
起動時にインスタンスの回復処理を行う。
また、定期的に使用されていない一時セグメントをクリーンアップしたり、断片化した空き領域を結合する。
PMON
プロセス・モニター
ユーザー・プロセスに障害が発生した場合、プロセスの回復処理を行う。キャッシュをクリーンアップし、プロセスが使用していたリソースを使用可能にする。
また、Dnnnプロセスとサーバー・プロセスを監視して、障害が発生した場合にはそれらのプロセスを再起動させる

データベースの設定・構成によって立ち上がるプロセス

プロセス名 内容
ARCH
アーカイバー
アーカイブをとる設定(パラメータ=LOG_ARCHIVE_START)の場合のみ有効。
満杯になったREDOログ・ファイルのオンラインREDOログ情報を、アーカイブ・ファイルへコピーする。
RECO
リカバラー
分散データベース環境(パラメータ=DISTRIBUTED_TRANSACTIONS)の場合のみ有効。、ネットワーク/ノード障害のために保留されている分散トランザクションがある場合、ローカルのRECOプロセスは定間隔でリモート・データベースに接続し、ローカル・データベースを自動的にコミット、またはロールバックする。
LCKn
ロック
パラレル・サーバー構成でのみ使用。
最大10個のLCKnプロセス(LCK1...LCK9)によって、内部インスタンス・ロックを制御する
Dnnn
ディスパッチャー
マルチスレッド・サーバー構成でのみ使用。
接続されたユーザー・プロセスから使用可能な共有サーバー・プロセスへ要求を割り当て、該当するユーザー・プロセスに応答する。処理結果をユーザ・プロセスに戻す。
使用されているトランスポート・プロトコルごとに、1つのディスパッチャー・プロセスが必要(D000...Dnnn)
Snnn
サーバー
接続しているユーザー・プロセスからの要求を、ユーザー・プロセスに代わって処理する。専用サーバー構成では、1つのサーバー・プロセスが1つのユーザー・プロセスの要求を処理する。マルチスレッド・サーバー構成では、多くのユーザー・プロセスが、わずかなサーバー・プロセスを共有する


問合せ文の実行

1.解析フェーズ

  1. ユーザプロセスがサーバプロセスに問合せ(SELECT)を送り、解析要求をする。
  2. サーバプロセスは問合せ文の妥当性を検査し、共有プール内でコンパイルする。
  3. 解析の成功/失敗のステータスをユーザプロセスに返す。

2.実行フェーズ

  1. サーバプロセスがデータの取り出しを準備する。

3.フェッチフェーズ

  1. サーバが問合せで取り出した行をユーザに戻す。

DML文の実行

1.解析フェーズ

  1. ユーザプロセスがサーバプロセスにSQL文(INSERT,UPDATE,DELETE)を送り、解析要求をする。
  2. サーバプロセスは問合せ文の妥当性を検査し、共有プール内でコンパイルする。
  3. 解析の成功/失敗のステータスをユーザプロセスに返す。

2.実行フェーズ

サーバプロセスは、

  1. データベース・バッファ・キャッシュ内に処理対象の「データ・ブロック」と、該当する「ロールバックセグメント・ブロック」があるかどうか検索する。 (見つからない場合は、データファイルからデータブロックとロールバックブロックを読み取り、データベース・バッファ・キャッシュ内に配置する)
  2. データをロックする。
  3. 変更前・変更後の値をREDOログ・バッファに書き込む。
  4. 変更前の情報を、データベース・バッファ・キャッシュ内の「ロールバックセグメント・ブロック」に書き込む。
  5. 対象の行(データ・ブロック)を変更する。

3.コミット

  1. サーバプロセスは、レコードとシステム変更番号(SCN)をREDOログバッファに書き込む。
  2. LGWRは、コミットされたレコードを含む全てのREDOログバッファの内容を、REDOログファイルに書き込む。
  3. サーバプロセスは、ユーザプロセスにコミット完了通知をし、トランザクション完了ロック解除情報データベース・バッファ・キャッシュに記録する。

コミット処理と読み取り一貫性

Oracleは読み取り一貫性機能によって、他ユーザが更新用にロックをかけている行でも検索を行なうことができる。

例)
  ユーザA <---- 部門表の総務部の部門番号を10から20に更新中 -----------><コミット------------------->
  ユーザB <---- この間、総務部の部門番号を検索すると結果は10 -----------><---これ以降は、結果は20--->

  ユーザAがコミットし、処理を確定するまでは、ユーザBは変更前のデータしか検索できない。

読み取り一貫性は、ロック単位で保証されている。
一般に、Oracleは行ロックだが、一連の処理を1つの読取専用トランザクションとして指定することもできる(SET TRANSACTION READ ONLY; )


TOP > Oracleアーキテクチャ

2001/01/24 担当:K.Y