COL: CSS:



データベースファイル (1)

データベースファイル

データベースファイルで主要なものは以下の 3 つ。

制御ファイル
Oracle データベースを正常に起動 / 操作するための整合性の維持に必要なバイナリ・ファイル
データファイル
ユーザーデータや,Oracle システムのデータを格納する場所。
REDO ログファイル
データベースに対する変更内容を記録するファイル。

制御ファイル

制御ファイルは Oracle によって絶えず更新されるため,データベースがオープンな状態では書込み可能になっている必要がある。なんらかの理由で制御ファイルにアクセスできない場合,データベースは正常に機能しなくなる

制御ファイルには,起動時と通常の操作時に必要な,インスタンスからアクセスする関連データベースの様々な情報が格納されている。バイナリデータである制御ファイルの情報を変更できるのは Oracle のみで,データベース管理者やユーザーは制御ファイルを編集できない。制御ファイルに格納されている情報は以下の通り。

  • データベース名
  • 対応するデータファイルと REDO ログファイルの名前と位置
  • データベース作成のタイムスタンプ
  • 現行のログ順序番号
  • チェックポイント情報

制御ファイルの格納場所とファイル名は,初期化パラメータファイルの CONTROL_FILES に記述しており,データベースをマウントする際に読み込まれる。制御ファイルは多重化しておくことが推奨され,多重化を行う場合は,CONTROL_FILES に複数のファイルパスを指定する。

/* Code020201: 初期化パラメータファイル CONTROL_FILES 初期化パラメータ */

CONTROL_FILES = (/u01/oracle/prod/ctrl01.ctl,
                 /u02/oracle/prod/ctrl02.ctl, 
                 /u03/oracle/prod/ctrl03.ctl)

制御ファイルは多重化し,それぞれ異なる物理ディスク上に配置することが推奨される。

データファイル

Oracle データベースは,“表領域” という論理的な単位で分けることができる。表領域には 1 つ以上のデータファイルを関連付け,そのデータファイル内に表などのセグメントを格納する。またデータファイルは,複数の表領域に関連付けられることはなく,1 つの表領域及び 1 つのデータベースにのみ対応付けられる

SYSTEM 表領域以外の表領域は,いつでもオフライン化またはオンライン化できる。表領域をオフライン化またはオンライン化すると,その表領域を構成するすべてのデータファイルは 1 単位としてオフライン化またはオンライン化される (個々のデータファイルをオフライン化することもできるが,通常この操作を行うのは一部のデータベースリカバリ手順を実行する場合のみ)。

ローカル管理の一時表領域には,通常のデータファイルと同様の一時データファイルがあるが,以下の点で通常のデータファイルと異なる。

  • 一時データファイルは,常に NOLOGGING モードに設定される。
  • 一時データファイルを読取り専用にすることはできない
  • ALTER DATABASE 文では一時データファイルを作成できない。
  • メディア・リカバリでは一時ファイルが認識されない
    • BACKUP CONTROLFILE 文では,一時データファイルに関する情報が生成されない。
    • CREATE CONTROLFILE 文では,一時データファイルに関する情報を指定できない。
  • 一時データファイルを作成またはサイズ変更する場合,指定したファイルサイズのディスク領域が常に保証されるとはかぎらない。例えば UNIX でのディスク・ブロックは,ファイルの作成またはファイルのサイズ変更時ではなく,ブロックがアクセスされる前に割り当てられる。
  • 一時データファイルの情報は,ディクショナリ・ビュー DBA_TEMP_FILES動的パフォーマンス・ビュー V$TEMPFILE には表示されるが,DBA_DATA_FILES や V$DATAFILE ビューには表示されない。

REDO ログファイル

REDO ログファイルは,リカバリ操作で最も重要で,データベースに加えられたすべての変更を発生時に記録する,2 つ以上の事前割当てファイルから構成される。Oracle Database の各インスタンスには,インスタンスの障害時にデータベースを保護するための REDO ログファイルが 1 つずつ対応付けられている。

REDO ログファイルは循環式のファイルで,バックグラウンド・プロセス内のログライター・プロセス (LGWR) によって,REDO ログバッファの内容を 1 つのREDO ロググループに書き出す。現行のREDO ログファイルが一杯になると,LGWR は次に使用可能な REDO ログファイルへの書き込みへ移行し,再度循環を開始する。

一杯になった REDO ログファイルは,アーカイブが使用可能になっているかどうかに応じて,LGWR で再利用できる。

  • アーカイブが使用禁止 (データベースが NOARCHIVELOG モード) の場合,一杯になった REDO ログファイルは,そこに記録された変更がデータファイルに書き込まれた後に使用可能になる。
  • アーカイブが使用可能 (データベースが ARCHIVELOG モード) の場合,一杯になった REDO ログファイルは,そこに記録された変更がデータファイルに書き込まれ,かつ,そのファイルがアーカイブされた後,LGWR で使用可能になる。

データベースが現行の REDO ログファイルへの書込みを終了し,次のファイルへの書込みを開始するポイントのことをログスイッチという。ログスイッチは以下の時点で発生する。

  • 現行の REDO ログファイルが完全にいっぱいになり,引き続き次の REDO ログファイルへの書込みが必要になったとき
  • REDO ログファイルとは無関係に定期的に発生する
  • 手動でスイッチが要求されたとき

Oracle Database は,ログスイッチが発生して LGWR が書込みを開始するたびに,各 REDO ログファイルに新しいログ順序番号を割り当てる。データベースが REDO ログファイルをアーカイブしても,そのファイルのログ順序番号は変わらない。一巡して再び使用可能になった REDO ログファイルには,次に使用可能なログ順序番号が割り当てられ,REDO ログファイルやアーカイブ REDO ログファイルは,そのログ順序番号で一意に識別されるクラッシュインスタンスまたはメディア・リカバリ中に,データベースは必要なアーカイブおよび REDO ログファイルのログ順序番号を使用して,REDO ログファイルを昇順に正しく適用する。

障害に備え,REDO ログを多重化できる。REDO ログの 2 つ以上の同一コピーを自動的に別の場所に保持できる。この保存場所は別々のディスクにすることが推奨される。REDO ログファイルを多重化すると,LGWR は同じ REDO ログ情報を複数の REDO ログファイルに書き込む。

多重化は,REDO ログファイルのグループ (REDO ロググループ) を作成することによって実装され,グループは REDO ログとその多重化されたコピーで構成される。それぞれの同一コピーはグループのメンバーと呼ばれ,各 REDO ロググループは,グループ 1,グループ 2 のように数値で定義される。