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サーバは、データベース名(DB_NAME)で識別されるOracleデータベースと、
[Oracle 8i (リリース8.1)以降] グローバル・データベース名(データベース名.ドメイン名)。合計128文字、データベース名は8文字以内
[Oracle 8 (リリース8.0)以前] ORACLE_SID (システムID)
で識別されるOracleインスタンスによって構成される。
オペレーティングシステムファイル(要するに物理ファイル)からなる物理構造で、データベース自体を格納するデータベースファイル以外にも、REDOログファイル、パラメータファイル等から構成されている。
詳細は下記「1.ファイル群」参照。
システム・グローバル・エリア(SGA)というメモリ構造と、Oracleサーバがデータベースを管理する際に使用するバックグラウンド・プロセス群から構成されており、Oracleサーバが稼動しているマシンのメモリ上に割り当てられる。
SGAとバックグラウンド・プロセス群は、1つのインスタンスに1セットずつ割り当てられる共有領域であり、インスタンス起動時に確保される。
詳細は下記「2.メモリ領域、3.バックグラウンド・プロセス群」参照。
ファイル名 | 内容 |
---|---|
データ・ファイル | 表領域と対応づけられているファイル。 表、索引などのすべてのデータベース・データとデータの構造、システム管理情報が格納されている。つまり、表や索引と表領域の対応はN:1である。 そのため、開発者やユーザはファイルの位置を意識する必要はない。 |
REDOログ・ファイル | ディスク障害等、障害発生時に備えて、データベースに対して行われたすべての更新情報が記録されているファイル。 更新したデータがデータ・ファイルに書き込まれていなかった場合でも、REDOログ・ファイルから更新情報を取得してデータが復旧できる。 |
制御ファイル |
データベースの整合性を維持するため、データベースの現在の状態や、物理構成が記録されているファイル。
を管理している |
パラメータ・ファイル | データベースの様々なパラメータを設定するファイル。 データベース管理者が、Oracleデータベースの調整を行なう際に編集する。編集後は該当Oracleインスタンスの再起動が必要。 |
パスワード・ファイル | 管理用データベースユーザを認証する際に使用するファイル |
アーカイブ・ファイル | REDOログ・ファイルのバックアップ・ファイル(オフライン・コピー)。 これは、Oracleの運用には必須ではないので、運用方法によって取得するかどうか決定する。 |
上記ファイルのなかで、データベース管理者が直接編集できるのはパラメータ・ファイルだけである。それ以外は、Oracleプロセスが自動的に管理する。
メモリ領域 | 内容 |
---|---|
データベース・バッファ・ キャッシュ |
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の領域のサイズは、Oracleが自動的に決定する。データベース管理者が指定することはできない。
プロセス名 | 内容 |
---|---|
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つのユーザー・プロセスの要求を処理する。マルチスレッド・サーバー構成では、多くのユーザー・プロセスが、わずかなサーバー・プロセスを共有する |
サーバプロセスは、
Oracleは読み取り一貫性機能によって、他ユーザが更新用にロックをかけている行でも検索を行なうことができる。
例)
ユーザA <---- 部門表の総務部の部門番号を10から20に更新中 -----------><コミット------------------->
ユーザB <---- この間、総務部の部門番号を検索すると結果は10 -----------><---これ以降は、結果は20--->
ユーザAがコミットし、処理を確定するまでは、ユーザBは変更前のデータしか検索できない。
読み取り一貫性は、ロック単位で保証されている。
一般に、Oracleは行ロックだが、一連の処理を1つの読取専用トランザクションとして指定することもできる(SET TRANSACTION
READ ONLY; )
2001/01/24 担当:K.Y