タイトル: 制御ファイル
SEOタイトル: Oracle 制御ファイル(control file)完全ガイド(役割 / 多重化 / バックアップ / 再作成)
| この記事の要点 |
|
制御ファイルとは
制御ファイル(control file)は Oracle データベースを構成する物理ファイルの 1 つで、データベース全体の物理構造に関するメタ情報を保持するバイナリファイルです。サイズは数 MB 〜 数十 MB と小さいですが、これがないとデータベースは起動できないという極めて重要な役割を持ちます。
主な格納情報
| カテゴリ | 内容 |
|---|---|
| データベース識別子 | データベース名、DBID、作成タイムスタンプ |
| データファイル情報 | 各データファイルのパス、サイズ、ステータス |
| REDO ログ情報 | オンライン REDO ログのパス、サイズ、シーケンス番号 |
| 表領域情報 | 表領域とデータファイルの対応 |
| チェックポイント情報 | SCN(System Change Number)、リカバリ用情報 |
| バックアップ履歴 | RMAN を使った場合のバックアップ・コピー履歴 |
| アーカイブログ情報 | アーカイブ REDO ログの位置 |
インスタンス起動時の役割
Oracle インスタンスの起動は 3 段階で進みます。制御ファイルは MOUNT 段階で読み込まれます。
| 段階 | 処理 |
|---|---|
| NOMOUNT | SGA 確保、バックグラウンドプロセス起動(パラメータファイルのみ読み込み) |
| MOUNT | 制御ファイルを読み込み、データファイル / REDO ログの場所を確認 |
| OPEN | データファイル / REDO ログを開き、利用可能状態に |
多重化(多重制御ファイル)
制御ファイルが 1 つだけだと、それが壊れた瞬間に DB が起動不能になります。Oracle では同一内容を複数の物理ディスクに保存する多重化が推奨されます。
-- 現在の制御ファイル一覧
SHOW PARAMETER control_files
-- 複数指定(init.ora / spfile)
*.control_files='/u01/oracle/oradata/orcl/control01.ctl',
'/u02/oracle/oradata/orcl/control02.ctl',
'/u03/oracle/oradata/orcl/control03.ctl'
spfile を使っている場合は次の手順で追加します。
-- spfile を変更
ALTER SYSTEM SET control_files=
'/u01/.../control01.ctl',
'/u02/.../control02.ctl',
'/u03/.../control03.ctl'
SCOPE=SPFILE;
-- DB を停止
SHUTDOWN IMMEDIATE;
-- OS コマンドで新しい場所に物理コピー
-- cp /u01/.../control01.ctl /u02/.../control02.ctl
-- 起動
STARTUP;
バックアップ
制御ファイルは定期バックアップ必須です。次の 2 通りの方法があります。
-- バイナリコピー
ALTER DATABASE BACKUP CONTROLFILE TO '/backup/control_backup.ctl';
-- テキストの再作成スクリプトとして出力
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
-- → USER_DUMP_DEST の .trc ファイルに CREATE CONTROLFILE 文が出力される
RMAN を使う場合は、CONFIGURE CONTROLFILE AUTOBACKUP ON; で構造変更時に自動バックアップされる設定が可能です。
再作成
すべての制御ファイルが失われた場合は、CREATE CONTROLFILE 文で再作成できます(バックアップしておいた TRACE 出力を利用)。
STARTUP NOMOUNT;
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/oradata/orcl/redo01.log' SIZE 50M,
GROUP 2 '/u01/oradata/orcl/redo02.log' SIZE 50M
DATAFILE
'/u01/oradata/orcl/system01.dbf',
'/u01/oradata/orcl/sysaux01.dbf',
'/u01/oradata/orcl/users01.dbf'
CHARACTER SET AL32UTF8;
ALTER DATABASE OPEN;
確認用ビュー
| ビュー | 用途 |
|---|---|
V$CONTROLFILE | 制御ファイルのパス / ステータス |
V$CONTROLFILE_RECORD_SECTION | セクションごとのレコード使用状況 |
V$DATABASE | DBID、CONTROLFILE_TYPE |
運用ベストプラクティス
- 最低でも 2 つ以上、別の物理ディスクに配置
- spfile / pfile への
control_files設定を統一 - RMAN AUTOBACKUP を有効にして、DB 構造変更のたびに自動バックアップ
ALTER DATABASE BACKUP CONTROLFILE TO TRACEを定期取得しておく(緊急再作成用)