OracleインスタンスはSGAとバックグラウンド・プロセスで構成される?データベースとの違いも解説

Oracle

Oracle Databaseを学び始めると、「インスタンス」「SGA」「バックグラウンド・プロセス」「データベース」という用語がまとめて登場するため、それぞれの関係が分かりにくくなりがちです。

基本的には、OracleインスタンスはSGA(System Global Area)とバックグラウンド・プロセスによって構成されると理解して問題ありません。ただし、Oracle Database全体とインスタンスは同じものではなく、データファイルや制御ファイルなどの物理ファイルはインスタンスとは別に考える必要があります。

この記事では、Oracleインスタンスの構成、SGAとバックグラウンド・プロセスの役割、データベースとの違い、RAC環境での考え方まで整理します。

OracleインスタンスはSGAとバックグラウンド・プロセスで構成される

Oracle Databaseの基本概念では、インスタンスは主にSGAとバックグラウンド・プロセスの集合として説明されます。

SGAは複数のプロセスから共有されるメモリー領域で、バックグラウンド・プロセスはデータベースの入出力、リカバリ、チェックポイント、ログ書き込みなどを担当します。

Oracle公式ドキュメントでも、データベースインスタンスはメモリー構造とバックグラウンド・プロセスで構成されるものとして説明されています。[参照] Oracle Database Concepts「Oracle Database Instance」

SGAとは何か

SGAはSystem Global Areaの略で、Oracleインスタンスが起動すると確保される共有メモリー領域です。複数のサーバープロセスやバックグラウンド・プロセスから利用されます。

SGAには、代表的に次のような領域があります。

領域 主な役割
Database Buffer Cache データファイルから読み込んだデータブロックを保持する
Shared Pool SQLやPL/SQL、データディクショナリ情報などをキャッシュする
Redo Log Buffer 変更履歴であるREDO情報を一時的に保持する
Large Pool 特定の大規模メモリー処理などに利用される
Java Pool Oracle JVM関連の処理で利用される

どの領域がどの程度確保されるかは、データベースの設定や機能によって異なります。SGAは単なるキャッシュ領域ではなく、Oracleインスタンスの処理に必要な共有メモリー全体を指します。

バックグラウンド・プロセスとは何か

Oracleのバックグラウンド・プロセスは、ユーザーから直接SQLを受け付けるプロセスとは別に、データベースを維持するための処理を担当します。

代表的なバックグラウンド・プロセスには、DBWn、LGWR、CKPT、SMON、PMONなどがあります。Oracleのバージョンや構成によって動作するプロセスの種類や数は異なります。

プロセス 主な役割
DBWn 変更されたバッファをデータファイルへ書き込む
LGWR Redo Log BufferのREDO情報をオンラインREDOログへ書き込む
CKPT チェックポイント関連の処理を調整する
SMON インスタンスリカバリなどのシステム管理処理を行う
PMON 異常終了したプロセスの後処理などを行う

Oracle公式のプロセスアーキテクチャ資料では、こうしたバックグラウンド・プロセスの役割が詳しく説明されています。[参照] Oracle Database Concepts「Process Architecture」

OracleインスタンスとOracleデータベースは同じではない

ここが最も混同されやすいポイントです。Oracleでいう「インスタンス」と「データベース」は厳密には別物です。

インスタンスがSGAとバックグラウンド・プロセスからなる実行環境であるのに対し、データベースは主にデータファイル、制御ファイル、オンラインREDOログなどの物理ファイル群を指します。

用語 主な構成要素
インスタンス SGA+バックグラウンド・プロセス
データベース データファイル、制御ファイル、REDOログなど

イメージとしては、インスタンスがデータベースファイルを操作するための「実行中の仕組み」で、データベースが実際のデータを保持する「永続的なファイル群」と考えると分かりやすいでしょう。

STARTUPすると何が起きるのか

OracleでSTARTUPを実行すると、段階的にインスタンスとデータベースが利用可能な状態へ進みます。

まずインスタンスが起動し、SGAが確保され、必要なバックグラウンド・プロセスが開始されます。その後、制御ファイルを読み込んでデータベースをマウントし、最終的にデータファイルやREDOログをオープンします。

この流れを理解すると、「インスタンス」と「データベース」が別概念であることが分かりやすくなります。インスタンスだけ起動していて、まだデータベースをマウント・オープンしていない状態も存在します。

NOMOUNT・MOUNT・OPENの違い

Oracleの起動状態は、一般的にNOMOUNT、MOUNT、OPENという段階で理解できます。

状態 主な状態
NOMOUNT インスタンスが起動し、SGAとバックグラウンド・プロセスが存在する
MOUNT 制御ファイルを読み込み、データベースを認識している
OPEN データファイルなどを開き、通常利用できる状態

特にNOMOUNT状態を見ると、インスタンスとデータベースが別物であることがよく分かります。この段階ではインスタンスは存在していますが、データベースはまだマウントされていません。

ユーザープロセスやサーバープロセスはインスタンスの構成要素なのか

Oracleにはバックグラウンド・プロセス以外にも、ユーザープロセスやサーバープロセスがあります。ただし「Oracleインスタンスの構成要素」という基本的な説明では、通常はSGAとバックグラウンド・プロセスを指します。

ユーザープロセスはSQL*Plusやアプリケーションなどのクライアント側処理に対応し、サーバープロセスはユーザーからの要求を処理します。

つまり、Oracle全体のプロセス構成を説明するときにはユーザープロセスやサーバープロセスも重要ですが、「Oracleインスタンスとは何で構成されるか」という問いではSGA+バックグラウンド・プロセスが基本回答になります。

PGAはインスタンスの構成要素ではないのか

PGA(Program Global Area)もOracleの重要なメモリー領域ですが、SGAとは性質が異なります。PGAは原則として個々のプロセスに割り当てられる非共有メモリー領域です。

そのため、Oracleインスタンスの典型的な定義を「SGA+バックグラウンド・プロセス」とする場合、PGAをSGAと同列にインスタンスの構成要素として数える説明は通常しません。

ただし、Oracle Database全体のメモリーアーキテクチャを理解するうえではSGAとPGAの両方が重要です。SGAは共有領域、PGAは各プロセスに関連した専用領域、という違いを押さえておくと整理しやすくなります。

RACでは1つのデータベースに複数インスタンスが存在する

単一インスタンス構成では「1つのデータベースに1つのインスタンス」という形が一般的なので、両者を同じもののように感じることがあります。

しかしOracle Real Application Clusters(RAC)では、1つのデータベースに複数のインスタンスがアクセスします。それぞれのインスタンスには独自のSGAとバックグラウンド・プロセスがあります。

例えば2ノードRACなら、概念的には「インスタンスAのSGA+プロセス」「インスタンスBのSGA+プロセス」が存在し、それらが同じデータベースを利用します。この構造を見ると、インスタンスとデータベースを分けて理解する必要性がより明確になります。

よくある覚え方

資格試験や学習では、次のように整理すると覚えやすくなります。

概念 覚え方
Oracleインスタンス メモリー+動いているプロセス
SGA 複数プロセスで共有するメモリー
バックグラウンド・プロセス Oracleを裏側で動かすプロセス群
Oracleデータベース 永続的なデータを持つファイル群
PGA 各プロセスに関連する専用メモリー

かなり単純化した表現ですが、最初の理解としては「インスタンス=SGA+バックグラウンド・プロセス」「データベース=物理ファイル」と分けるのが有効です。

まとめ:OracleインスタンスはSGAとバックグラウンド・プロセスで構成される

Oracle Databaseの基本的なアーキテクチャでは、OracleインスタンスはSGAとバックグラウンド・プロセスによって構成されると理解して問題ありません。

SGAにはDatabase Buffer Cache、Shared Pool、Redo Log Bufferなどがあり、バックグラウンド・プロセスにはDBWn、LGWR、CKPT、SMON、PMONなどがあります。

一方、データファイル、制御ファイル、オンラインREDOログなどは「インスタンス」ではなく「データベース」側の構成要素です。またPGAは各プロセスに関連した専用メモリーであり、SGAとは区別して理解します。

Oracleの構造を学ぶ際は、まず「インスタンス=動作中のメモリーとプロセス」「データベース=永続的なファイル」という2つを分けて考えると、STARTUP、NOMOUNT、MOUNT、OPEN、RACなどの仕組みも理解しやすくなります。

コメント

タイトルとURLをコピーしました