6.1 データベース記憶域構造の管理

一般ユーザがOracleデータベースを使用する際に、どの表からデータを取得するのかといった論理構造のみを意識すれば良い。

逆に一般ユーザは、目的のデータがディスク上のどこにあるのかといった物理構造を意識する必要はない。このように使いやすさは、データベースを使用するメリットの一つである。

データベース管理者は、論理構造である表領域と、物理構造であるファイル群の両方を意識して管理作業を行う必要がある。

▼データベースの物理構造

ファイル名説明
制御ファイル物理構造に関する情報が格納される
(データベースを構成するファイル群のパス名など)
REDOログファイルデータに対して、行われた変更情報が格納される。
データファイル全ての表や索引のデータが格納される。

データベースの論理構造は、データベースによって作成される。主な構造は

表領域である。表領域は、表や索引などのデータベースのオブジェクトを格納する入れ物と考えることができる。

各表領域に対して、1つ以上のデータファイルが作成される。

データベースでは、表(データ)を、論理的には表領域に格納し、物理的には表領域に関連したデータファイルに格納される。

■データベースの記憶域構造の確認

データベースの記憶域構造は、EM Expressの記憶域メニューで確認することができる。

■制御ファイル

制御ファイルは、データベースの物理構造の情報が記録されたバイナリファイルです。

データベースにどれほど多くのデータファイルが存在していたとしても、制御ファイルを使用すれば、すべてのデータファイルとREDOログファイルの情報を取得することができる。

制御ファイルは、データベースのマウント時に読み込まれる。

制御ファイルのファイル名は、CONTROL_FILES初期化パラメータで指定する。インスタンスの起動時に読み込まれるCONTROL_FILES初期化パラメータによって、制御ファイルのパス名が認識され、データベースのマウント時に制御ファイルが読み込まれる。全てのデータファイルとREDOログファイルのパス名が認識される。

▼制御ファイルには、下記の情報が格納される。

・データファイル情報

・REDOログファイル情報

・データベース名

・対応するデータファイルとREDOログファイルのパス名

・データベース作成のタイムスタンプ

・現行のログ順序ファイル

・チェックポイント情報

■制御ファイルが更新されるタイミング

制御ファイルは、データベースによって、自動的に更新される。

表領域を作成すると、データファイルがデータベースに追加される。すると制御ファイルにその物理ファイルの情報が自動的に追加される。

データベースが制御ファイルにアクセスできなくなると、インスタンスが停止する。制御fileの損失によるデータベース障害に対応するために、通常は制御ファイルを多重化しておく。

■EM Expressで制御ファイルの情報を確認する

■REDOログファイル

REDOログファイルは、ユーザがSQL文を使用して行ったトランザクションの内容や、データベースが内部的に行ったデータベースへの変更が記録されるファイルです。REDOログファイルは、インスタンス障害や停電、ディスク障害などによるシステム障害時のリカバリ処理で利用されます。

■REDOロググループとREDOログファイル

トランザクションの変更情報であるREDOレコードは、一時的にSGA内のREDOログバッファに書き込まれる。REDOログバッファのREDOレコードは、トランザクションのCOMMIT時に、LGWR(ログライター)プロセスによって、REDOログファイルに書き込まれる。

○REDOログファイルの構成

REDOログファイルは、必ず2つ以上のREDOロググループで構成されており、LGWRは、各グループに対して、循環方式で書込みを行う。

各グループには、1つ以上のREDOログファイル(各々のREDOログファイルは、メンバーと呼ぶ)が含まれる。

1つのグループ内に複数のファイルが構成されている場合は、それらのファイルには同一の内容が書き込まれる。

グループが3つあるとすると、LGWRは、最初に、グループ1に対して、REDOレコードの書き込みを行い、そのREDOログファイルが満杯になると、書込み先をグループ2に切り替えて、書込み処理を続ける。その後、グループ3が満杯になると、LGWRは、書込み対象をグループ1に切り替えて、書込み処理を続ける。各グループは、ログ順序番号で識別される。

LGWRの書込み対象のREDOログファイルを含むグループのことをカレントのREDOロググループ(現行のREDOロググループ)と呼ぶ。

REDOログファイルの書込み先が切り替わることをログスイッチと呼ぶ。

ログスイッチは、ALTER SYSTEM SWITCH LOGFILE文によって、手動で実行することもできる。

■REDOログファイルのアーカイブ

REDOログファイルは、グループを循環して書き込まれるため、順次上書きされていく。そのため、連続したREDOログファイルを保存しておくためには、REDOログファイルが上書きされる前にコピーを作成する必要がある。

これをREDOログファイルをアーカイブするという。

作成されたファイルのことをアーカイブログファイルと呼ぶ。

アーカイブログファイルは、ARCnプロセスによって、アーカイブされるREDOログファイルのコピーとなる。ARCnプロセスは、ログスイッチによって、書込み先が切り替わったタイミングで、アーカイブログファイルを作成する。

■REDOログファイルの多重化

グループ内に2つ以上のメンバがある状態を多重化されている状態という。2つ以上のREDOログファイル(メンバ)を別々のディスクに保持するように構成する。グループ内のREDOログファイルが多重化されていれば、仮にディスク1に障害が発生してアクセスできなくなった場合でも、ディスク2にあるそれぞれNグループのメンバが正常であれば、インスタンスを稼働し続けることができるため、通常は多重化しておく。

■EM ExpressによるREDOログファイルの多重化

■表領域とデータファイル

データベースのオブジェクトである表や索引は、セグメントという論理構造として、表領域という論理構造に格納されている。(表は、表セグメント、索引は、索引セグメントとして格納されている)

表領域は、表や索引をまとめる入れ物と考えることができる。各表領域に対して、1つ以上のデータファイルが作成され、表領域に格納されたセグメントは、物理的には表領域に対応する1つ以上のデータファイルに格納される。

データベースには、複数の表領域があり、これによって、データを論理的に分割することができる。

UNDOセグメントや一時セグメント(ユーザのSQL文実行中のソート領域などとして、使用される)といった、Oracleデータベースシステムが内部的に使用するセグメントには、専用の表領域を作成して、これらのセグメントを配置する。

■記憶域のコンポーネント

Oracleデータベースの論理構造には、表領域、セグメント、エクステント、データブロックがあります。

記憶域の論理構造に関する用語

用語説明
表領域データベース内のオブジェクトをグループ化して、
格納するための領域。表領域に対して、1つ以上の
データファイルが作成される。
また、兵糧域には、複数のセグメントを格納できる。
セグメント表や索引、UNDOセグメントなどのデータベース
オブジェクトによって、使用される領域。
1つのオブジェクトが1つのセグメントとなる。
セグメントには、データの種類によって、色々なタイプが
ある。例えば、表は表セグメント、索引は索引セグメント。
1つのセグメントは、同じ表領域内であれば、複数のデータ
ファイルにまたがることが可能。
セグメントの猟奇は、エクステント単位で割り当てられ、
割り当てられたエクステントが満杯になったら、
そのセグメントに対して、新しいエクセテントが
割り当てられる。

エクステント
1回の割当で、取得される特定数の連続したデータブロック。
エクステントのサイズは、表領域の作成時に指定できる。
1つのエクステントは、データファイルをまたぐことはできない。
データブロックI/Oの最小単位。データブロックには、データが格納される。
オブジェクトが表であれば、1つのデータブロックに複数
の行を格納できる。
データベースのサイズは、データベースの作成時に指定
できるが、事前構成済のデータベースを選択した場合は、
データブロックサイズは、8kで固定され、変更できない。

■事前構成済データベースの表領域

インストール時に作成した事前構成済データベースには、作成時点で次の表領域が自動的に作成されるため、表領域を追加しなくても、データベースを稼働できます。

この状態からさらに表領域を追加するなどして、カスタマイズすることも可能です。

表領域名説明
SYSTEMデータベース作成時に自動的に作成される表領域。
Oracleデータベースシステムがデータベースの管理情報を
各のするために使用する。データディクショナリは、
この表領域に格納される。SYSTEM表領域内のオブジェクトは
SYSスキーマに存在するため、SYSユーザまたは、必要な
権限を持つ管理者ユーザしかアクセスすることができない。
SYSAUXSYSTEM表領域の補助表領域。データベース作成時に自動的に
作成される。Oracle Database 9i 以前では、一部の
コンポーネントや製品でSYSTEM表領域や専用の表領域が
使用されていたが、これらのコンポーネントや製品は、
現在はSYSAUX表領域を使用している。
SYSAUX表領域が実装されたことによって、SYSTEM表領域
の負荷が軽減され、監視および管理しなければならない表領域
が少なくなり、メンテナンス負担も減少させた。
TEMPデータベースには、ユーザに割り当てられる一時表領域を作成
しておく必要がある。事前構成済データベースでは、TEMP
表領域がデフォルトの一時表領域(ユーザアカウントの作成
時に一時表領域が明示的に指摘されていない場合にユーザに
割り当てられる表領域)として、指定されている。
一時表領域には、ソート処理のデータというセッション中にのみ存在する、SQL文の処理中に生成された一時的なデータ(
一時セグメント)が格納される。
UNDOTBS1OracleデータベースシステムがUNDOデータの保存に使用する
表領域。データベースの作成時に作成される。UNDO表領域
は、すべてのデータベースに必要である。
USERSユーザが作成するオブジェクトを格納するための表領域。
事前構成済データベースでは、USERS表領域が全ての新しい
ユーザのデフォルト表領域に指定される。
EXAMPLEDBCAの中でサンプルスキーマを作成するチェックボックスにチェックをつけると作成される表領域。
さまざまなサンプルデータが格納されている。

SYSTEM表領域およびSYSAUX表領域の名前は固定である。それ以外の表領域名は自由に変更することができる。データベース内にUNDO表領域と一時表領域は、最低でも1つ必要である。

また、ユーザが表を作成することができるユーザ用の表領域も準備する必要がある。

あわせて読みたい