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

Oracleデータベースシステムは、OracleインスタンスとOracleデータベースから構成されている。

インスタンスとは、データベースに対するさまざまな管理を行うためのプロセス群とそのプロセス群が使用する共有メモリ構造の総称である。

これは、Oracleデータベースシステムのエンジン部分と言える。

データベースとは、インスタンスの管理対象である様々なデータが格納押されているファイル群のことである。

ユーザがデータベースを使用するためには、インスタンスが起動している必要がある。インスタンスが停止している状態では、ユーザやアプリケーションは、データベースにアクセスすることができず、使用できない。

インスタンスとデータベースの基本構成は、インスタンス1つに対して、データベース1つとなる。

▼1つのインスタンスで複数のデータベースを管理するRDBMSもある。

Oracleデータベースシステムでは、インスタンスとデータベースは1対1で構成される(単一インスタンス)である。

Oracleデータベースの応用的な構成として、RAC(Real Application Clusters)という構成がある。RACでは、1つのデータベースに複数のインスタンスが対応している。

■インスタンス

インスタンスは、1台のコンピュータ上に1つだけ実行することもできるし、複数を同時に実行することもできる。

インスタンスは、特定のコンピュータ上でシステム識別子(SID)という一意の名前で区別される。SIDは、環境変数ORACLE_SIDで設定する。

インスタンスは、共有メモリ構造であるSGAとOracleバックグラウンドプロセスで構成される。

■SGA(システムグローバル領域)

SGA(システムグローバル領域:System Global Area)は、OSの共有メモリ内に確保される領域のことである。ここに置かれたデータは、複数のプロセスによって、共有される。

よく使用するデータをSGA上に読み込んで、共有する(キャッシュする)ことで、多数のユーザによるディスクアクセスの繰り返しを防ぎ、パフォーマンスの悪化を防ぐことができる。

SGAの領域は、用途別に分かれている。各領域のサイズは動的な構成になっており、REDOログバッファ以外は、インスタンスを起動したままでサイズを動的に変更できる。

▼SGA(システムグローバル領域)の構成要素

○データベース・バッファ・キャッシュ

○REDOログバッファ

○共有プール

○Javaプール

○Streamsプール

○ラージ・プール

▼SGAのデータ構成要素

名前説明
データベース・バッファ・キャッシュデータ用の作業領域。ディスクから取り出されたデータがキャッシュされる。
各ユーザは、この領域にアクセスしてデータの参照や変更を行う。
データベース・バッファ・キャッシュ上に該当データが存在しない場合は、先にディスクからデータベース・バッファ・キャッシュにデータが読み込まれる。
最適なパフォーマンスを得るためには、データベース・バッファ・キャッシュに十分な容量を確保して、ディスクI/O
操作が頻繁に行われないようにすることが必要。
REDOログバッファデータベースに加えられた変更履歴情報(REDOエントリ)
を一時的(ディスク上のREDOログファイルに書き込むまでの間)に蓄えておく領域。
共有プールSQL文が解析された時に解析済みのSQL文やPL/SQLのコード、実行計画、データディクショナリ情報などが格納されている領域。SQL文実行の際に必要な情報を多数のユーザが共有し、
再利用できるようにキャッシュすることで、メモリの節約や
ディスクアクセスおよびCPUの浪費や負荷を防ぐ。
ラージ・プールオプション領域。
▼下記の場合に構成する
・データベースで共有サーバ構成を使用する場合
・パラレル問合せを使用する場合
・RMAN(Recovery Manager)を使用して、バックアップ/
リスト操作を行う場合など
これらの場合に、ラージ・プールが構成されていないと、
代わりに共有プールが使用されてしまう。
ラージ・プールは、共有プールには適さない大量のメモリ割当
用の領域として使用する。
JavaプールJava仮想マシン(JVM)内のセッション固有のJavaコードやデータのために使用される領域。
SteamsプールOracle Steamsによって、使用される領域。

※データディクショナリとは、データベースの管理情報を格納している読み取り専用の表の集合のこと。データディクショナリは、SQL文の解析時や、Oracleデータベースの稼働時に常に使用されている。

■Oracleバックグラウンドプロセス

Oracleバックグラウンドプロセスは、インスタンスの起動時に自動的に起動するプロセス群です。このプロセス群は、ユーザ個別の処理を行うのではなく、OSと連携して、メモリ構造を管理したり、ディスクI/Oを行って、ディスクにデータを書き込むなど、Oracleデータベースシステムがスムーズに動作するために必要な全体管理を行っている。

主な役割として、Oracleデータベースシステムの裏で様々なメンテナンスを行っている。バックグラウンドプロセスには、多くの種類があり、各々役割が異なる。

▼主なバックグラウンドプロセス

SMON、CKPT、ARCn、PMON、LGWR、MMON、DBWn

▼主要なバックグラウンドプロセス

プロセス名説明
SMON
(システムモニタ)
障害などによって、インスタンスを再起動した際に、インスタンス・リカバリを実行する。
インスタンス・リカバリとは、インスタンスの異常終了によって、失われデータを直近のトランザクションのコミット時まで
回復すること。
PMON
(プロセスモニタ)
ユーザプロセスの障害時に、使用していたリソースを開放して、クリーンアップを行う。
DBWn(nは数字)
(データベースライター)
データベース・バッファ・キャッシュ上で変更されたデータをデータファイルに書き込む。複数のDBWnを起動できる。
CKPT
(チェックポイント)
データベース・バッファ・キャッシュ内の変更された全てのバッファが、DBWnによって、データファイルに書き込まれる
イベントをチェックポイントという。チェックポイントが起こると、CKPTは、DBWnを呼び出し、さらにメモリとディスクの
動機情報を制御ファイルとデータファイルに書き込む。
この情報を利用するとどこまでディスクに書き込みが完了しているがわかるため、障害発生後の回復処理を実行できる。
LGWR
(ログライター)
REDOログエントリ(変更履歴情報)をREDOログファイルに書き込む
ARCn(nは数字)
(アーカイバ)
REDOログファイルをアーカイブログファイルとして、コピーする。アーカイブログファイルは、データファイルのバックアップを使用した障害回復時に使用される。
MMON
(管理性モニタ)
管理性に関するタスク(AWRのスナップショットの取得や、ADDM分析の実行など)を実行する。

基本的な構成では、ユーザプロセス1つに対して、サーバプロセス1つが対応する。この構成を専用サーバ構成という。データサーバ側のリソースの使用状況によっては、多くのユーザプロセスの要求を、それよりも少ないサーバプロセスが対応するように構成することもできる。この構成を共有サーバ構成という。

■PGA(プログラムグローバル領域)

PGA(プログラムグローバル領域:Program Global Area)は、各サーバプロセスやバックグラウンドプロセスが個々にデータを保存している非共有メモリ領域です。SGAと違い、PGAのデータにアクセスできるのは、1つのプロセスに限られる。SQL文の処理時の作業領域や、ログインおよびその他のセッション情報、セッションで使用する変数などを保持するための領域として使用される。

・セッションメモリ(ログイン情報、セッションに関係するその他の情報)

・プライベートSQL領域(バインド変数値、問合せ実行状況の情報、および問合せ実行作業領域など)

各サーバプロセス、バックグラウンドプロセスには、専用のPGAがプロセス起動時に割り当てられる。