目次
データベース記憶域構造の概要
データベースは制御ファイル、REDOログファイル、データファイルの3つの記憶域構造で構成される。データベースの記憶域構造はEM EXPRESSで確認することができる。制御ファイルには物理構造に関する情報が格納される(データベースを構成するファイル群のパス名など)REDOログファイルにはデータに対して行なわれた変更情報が格納される。データファイルには全ての表や索引のデータが格納される。
制御ファイル
制御ファイルを使えば全てのデータファイルとREDOログファイルの情報を取得することができる。インスタンスの起動時に読み込まれるControl_Files初期化パラメータによって制御ファイルのパス名が認識される。
データベースのマウント時に制御ファイルが読み込まれて全てのデータファイルとREDOログファイル名が認識される。
制御ファイルに格納される情報
制御ファイルに格納される情報は以下のようなものがあります。
メモ
- データベース名
- 対応するデータファイルとREDOログファイルのパス名
- データベース作成のタイムスタンプ
- 現行のログ順序番号
- チェックポイント番号
制御ファイルが更新されるタイミング
制御ファイルはデータベースによって自動的に更新される。データベースが制御ファイルにアクセスできなくなるとインスタンスが停止する。
EM_EXPLESSで制御ファイルの情報を確認する
1,EM EXPLESSの記憶域メニューから制御ファイルをクリックする。
2,制御ファイルのパス名と、ステータスの情報が表示される。
REDOログファイル
REDOログファイルはユーザーがSQL文を使用して行ったトランザクションの内容やデータベースが内部的に行ったデータベースへの変更が記録されるファイルである。
トランザクションの変更情報のREDOレコードは一時的にREDOログバッファに書き込まれる。REDOログバッファに書き込まれたREDOレコードは、トランザクションのコミットの際にLGWR(ログライター)プロセスによってREDOログファイルに書き込まれる。
REDOログファイルの構成
REDOログファイルは必ず2つ以上のREDOロググループで構成される。LGWRは循環方式で各グループに書き込みを行う。各グループには1つ以上のREDOログファイルが含まれる。1つのグループに複数のファイルが構成されている場合は同一の内容が書き込まれる。
グループ1に書き込みを行い、そのログファイルが満杯になったらグループ2に書き込みが行われる。グループ2が満杯になったらグループ3へ切り替わり書き込みが行われる。グループ3が満杯になったらグループ4へ切り替わり書き込みが行われる。グループ4が満杯になったらグループ1へ切り替わり書き込みが行われる。
このようにグループが切り替わる事をログスイッチという。各グループに付けられている番号をログ順序番号と呼ぶ。LGWRの書き込み対象のREDOログファイルの事をREDOロググループという。
REDOログファイルのアーカイブ
REDOログファイルはグループを循環して書き込まれる。その為、一通り各グループでログスイッチが行われるとグループ1に戻り上書きされ始める。REDOログファイルの情報を失いたくない場合はREDOログファイルが上書きされる前にコピーをとっておく必要がある。
このようにコピーを取る事をアーカイブするという。アーカイブされたファイルをアーカイブログファイルという。アーカイブする際にはARCnプロセスによってコピーを作成する。
REDOログファイルの多重化
グループ内に2つ以上のメンバーがある状態が多重化されている状態である。2つ以上のREDOログファイルを別々のディスクに保持するように構成する。REDOログファイルを多重化する事によってディスクの障害が発生したとしても多重化されていればサブディスクに書き込みすることができるのでインスタンスが稼働し続けることができる。
表領域とデータファイル
データベースのオブジェクトであるセグメントや索引は「セグメント」と呼ばれる論理構造として「表領域」という論理構造に格納される。
各表領域に対して1つ以上のデータファイルが作成され、表領域に格納されたセグメントは物理的には表領域に対応する1つ以上のデータファイルに格納される。
UNDOセグメントや一時セグメントといったOracleデータベースシステムが内部的に使用するセグメントには専用の表領域を作成してこれらのセグメントを配置する。
記憶域のコンポーネント
記憶域のコンポーネントは表領域、セグメント、エクステント、データブロックの4つで形成されています。
表領域
データベース内のオブジェクトをグループ化して格納する為の領域である。表領域に対して1つ以上のデータファイルが作成される。表領域には複数のセグメントを格納できる。
セグメント
セグメントとは表や索引の事である。UNDOセグメントなどのデータベースオブジェクトによって使用される領域。1つのオブジェクトで1つのセグメントである。セグメントにはデータの種類によって色んなタイプがある。同じ領域であれば複数のデータファイルに跨ることが可能である。
セグメントの領域はエクステント単位で割り当てられる。割り当てられたエクステントが満杯になったら新しいエクステントが割り当てられる。
エクステント
一回の割り当てで取得される特定数のデータブロック。エクステントのサイズは表領域の作成時に決めることができる。1つのエクステントは複数のデータファイルに跨ることができない。
データブロック
データブロックはI/Oの最小単位で形成されている。データブロックにはデータが格納されている。オブジェクトが表であれば1つのデータブロックに複数の行を格納できる。データブロックのサイズはデータベースの作成時に指定することができる。