Oracle データベースの要:制御ファイルのバックアップ手順

Oracle Master Gold

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 コマンドでバックアップを元の場所に戻す、シンプルな方法です。

  1. インスタンスを停止する。
  2. バックアップファイルを本来の制御ファイル名としてコピー(上書き)する。
  3. データベースをオープンする。
# 手順例
$ 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専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました