Oracle データベースにおいて、制御ファイル(Control File)はデータベースの「家系図」と「地図」を兼ねた、最も重要なバイナリファイルの一つです。このファイルが失われると、例えデータファイルが無事であってもデータベースを起動することができなくなります。
本記事では、初心者の方に向けて、制御ファイルの重要性と、SQL*Plus および RMAN(Recovery Manager)を使用した具体的なバックアップ・リカバリ手順を分かりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 制御ファイルとは?(その役割と重要性)
制御ファイルは、データベースの物理構造を記録しており、マウント時や実行時に常に参照されます。
- 主な管理情報:
- データファイルや REDO ログファイルの名前と場所
- データベース作成時のタイムスタンプや名前
- 現在の SCN(システム変更番号) 情報
- バックアップのメタデータ(RMAN 使用時)
- アーカイブログの記録
2. 制御ファイルのバックアップ方法
バックアップには、SQL*Plus を使う方法と、RMAN で自動化する方法の 2 系統があります。
2.1 SQL*Plus を使用したバックアップ
SQL*Plus では「テキスト(トレース)」と「バイナリ」の 2 種類で取得可能です。
(1) トレースファイルへの出力(再作成用スクリプト)
制御ファイルを再作成するための SQL 文をテキスト形式で出力します。万が一、すべての制御ファイルとバックアップが消失しても、このスクリプトがあれば構造を再定義できます。
-- 現在のトレースファイルの場所を確認
SQL> SELECT VALUE FROM V$DIAG_INFO WHERE NAME='Default Trace File';
-- トレースファイルへバックアップを出力
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
出力内容の例(抜粋): /u01/app/oracle/diag/.../trace/v19_ora_8896.trc 内には、以下のような CREATE CONTROLFILE 文が記録されます。
SQL> SELECT VALUE FROM V$DIAG_INFO WHERE NAME='Default Trace File';
VALUE
----------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_8896.trc
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
データベースが変更されました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ cat /u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_8896.trc
Trace file /u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_8896.trc
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
:
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET');
-- Configure RMAN configuration record 2
-- Replace * with correct password.
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK FORMAT ''/u01/app/oracle/backup1/%U'', ''/u01/app/oracle/backup2/%U''');
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_1_1005785759.dbf';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_1_1153872185.dbf';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/V19/temp01.dbf'
SIZE 165675008 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
-- Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "V19" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/V19/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/V19/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/V19/redo03.log' SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/V19/system01.dbf',
'/u01/app/oracle/oradata/V19/sysaux01.dbf',
'/u01/app/oracle/oradata/V19/undotbs01.dbf',
'/u01/app/oracle/oradata/V19/users01.dbf'
CHARACTER SET AL32UTF8
;
-- Configure RMAN configuration record 1
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('DEVICE TYPE','DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET');
-- Configure RMAN configuration record 2
-- Replace * with correct password.
VARIABLE RECNO NUMBER;
EXECUTE :RECNO := SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK FORMAT ''/u01/app/oracle/backup1/%U'', ''/u01/app/oracle/backup2/%U''');
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_1_1005785759.dbf';
-- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_1_1153872185.dbf';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/V19/temp01.dbf'
SIZE 165675008 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
(2) バイナリコピーとして取得
現在の制御ファイルをそのまま別の場所にコピーします。
-- 指定したパスにバイナリ形式でコピー
SQL> ALTER DATABASE BACKUP CONTROLFILE TO '/u01/app/oracle/backup/control01.ctl';
2.2 RMAN を使用したバックアップ(推奨)
RMAN を使用すると、運用の手間を大幅に削減できます。
(1) 手動バックアップ
# 制御ファイル単体のバックアップを取得
RMAN> BACKUP CURRENT CONTROLFILE;
# データベース全体のバックアップに制御ファイルを含める
RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;
(2) 自動バックアップの有効化
これを設定しておくと、構成変更時(ファイルの追加など)やバックアップ実行時に、RMAN が自動的に制御ファイルをバックアップします。最も推奨される設定です。
# 制御ファイルの自動バックアップを ON に設定
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
3. 制御ファイルのリストアとリカバリ
制御ファイルが破損・消失した際の復旧手順です。
3.1 バイナリバックアップ(SQL*Plus)からの復旧
OS コマンドでバックアップを元の場所に戻す、シンプルな方法です。
- インスタンスを停止する。
- バックアップファイルを本来の制御ファイル名としてコピー(上書き)する。
- データベースをオープンする。
# 手順例
$ sqlplus / as sysdba
SQL> SHUTDOWN ABORT;
SQL> !cp /backup/control01.ctl /u01/app/oracle/oradata/V19/control01.ctl
SQL> STARTUP;
3.2 RMAN を使用したリストア(自動バックアップ利用)
制御ファイルが一つもない状態(NOMOUNT 状態)から復旧できます。
# インスタンスを NOMOUNT で起動
RMAN> STARTUP NOMOUNT;
# 自動バックアップから制御ファイルを復元
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
# データベースをマウント状態へ
RMAN> ALTER DATABASE MOUNT;
# リカバリ実行
RMAN> RECOVER DATABASE;
# RESETLOGS でオープン
RMAN> ALTER DATABASE OPEN RESETLOGS;
4. 運用上の注意点とリスク
- 多重化の確認: 制御ファイルは通常、複数のディスクにまたがって多重化(コピー)して配置します(
CONTROL_FILESパラメータで設定)。 - リスク: すべてのコピーが同時に壊れると、
RESTOREまたはCREATE CONTROLFILEが必要になり、ダウンタイムが延びます。 - 戻し方: 誤って
CREATE CONTROLFILEで構造を変えてしまった場合は、直近のバイナリバックアップからRESTOREしてください。
FAQ:よくある質問
Q:トレースファイル(TRACE)とバイナリコピー、どちらが重要ですか? A:両方です。通常はバイナリコピーの方が復旧が早いですが、パス構成などを変更して再作成したい場合はトレースファイルが必須になります。
Q:制御ファイルが壊れると alert.log に出ますか? A:はい。I/O エラーなどが記録され、多くの場合データベースが異常終了(インスタンス・ダウン)します。
Q:自動バックアップ(AUTOBACKUP)の保存先はどこですか? A:デフォルトでは高速リカバリ領域(FRA)または dbs(Windows は database)ディレクトリに保存されます。
まとめ
- 制御ファイルは DB の構造を握る最重要ファイル。
- SQL*Plus では
TO TRACEで再作成スクリプトを、TO 'パス'でコピーを取得できる。 - RMAN では
AUTOBACKUP ON設定を必ず行うべき。 - 万が一の時は、バックアップからの RESTORE か、トレースによる CREATE で復旧する。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?



コメント