1. 制御ファイルとは?
制御ファイル(Control File)は、Oracleデータベースにおける重要なファイルの一つであり、以下の情報を管理します。
- データファイルやREDOログファイルの構成情報
- データベースのSCN(System Change Number)
- バックアップ情報(RMANカタログを使用していない場合)
- アーカイブログの管理情報
制御ファイルが破損すると、データベースの起動やリカバリができなくなるため、定期的にバックアップを取得することが重要です。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2. 制御ファイルのバックアップ方法
制御ファイルのバックアップ方法には、以下の2つの主要な方法があります。
2.1 SQL*Plus を使用したバックアップ
SQL*Plusを使用して、制御ファイルをトレースファイル(CREATE CONTROLFILE文として出力)またはバイナリコピーとして取得できます。
(1) トレースファイルへの出力
制御ファイルの内容をSQLスクリプトとして取得する方法です。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
このコマンドを実行すると、alert.log に出力されるほか、USER_DUMP_DEST ディレクトリ内にトレースファイルが作成されます。このトレースファイルを使用して、制御ファイルを再作成できます。
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';
このコマンドは、制御ファイルの現在の内容を指定したパスにバイナリ形式でコピーします。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2.2 RMANを使用したバックアップ
Oracle Recovery Manager(RMAN)を使用すると、制御ファイルのバックアップを自動的に管理できます。
(1) 制御ファイルのバックアップ
制御ファイル単体のバックアップを取得するには、以下のコマンドを使用します。
RMAN> BACKUP CURRENT CONTROLFILE;
(2) 制御ファイルを含むデータベース全体のバックアップ
制御ファイルを含めたバックアップを取得するには、以下のコマンドを使用します。
RMAN> BACKUP DATABASE INCLUDE CURRENT CONTROLFILE;
この方法を使用すると、データベース全体のバックアップと同時に制御ファイルのバックアップが取得できます。
(3) 自動バックアップを有効化する方法
制御ファイルのバックアップを自動で取得するには、以下の設定を行います。
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
この設定を有効にすると、
- データベース構成が変更された場合(データファイルの追加・削除、ログスイッチなど)
- バックアップが実行された際 に、制御ファイルのバックアップが自動的に取得されます。
3. 制御ファイルのリストアとリカバリ
制御ファイルを誤って削除してしまった場合、バックアップからリストア・リカバリを行う必要があります。
3.1 バイナリバックアップからのリストア
SQL*Plusを使用して、制御ファイルをリストアする手順です。
SHUTDOWN IMMEDIATE;
!cp /backup/control01.ctl /u01/app/oracle/oradata/ORCL/control01.ctl
STARTUP MOUNT;
ALTER DATABASE OPEN;
3.2 RMANを使用したリストア
RMANを使用して制御ファイルをリストアするには、以下の手順を実行します。
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
この手順により、制御ファイルを最新のバックアップから復旧し、データベースをオープンできます。
4. まとめ
- 制御ファイルはデータベースの構成情報を保持する重要なファイル である。
- バックアップ方法として、SQL*PlusとRMANがある。
- SQL*Plusでは、トレースファイルまたはバイナリコピーを取得できる。
- RMANでは、手動・自動バックアップの設定が可能。
- リストア・リカバリ方法を理解し、万が一のトラブルに備えることが重要。
定期的に制御ファイルのバックアップを取得し、障害発生時に迅速な復旧ができるように準備しておきましょう。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c




コメント