ヘッダーをスキップ
Oracle® Database管理者ガイド
11gリリース2 (11.2)
B56301-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

11 制御ファイルの管理

この章の内容は、次のとおりです。

制御ファイルの概要

制御ファイルはデータベースの物理構造を記録した小さなバイナリ・ファイルであり、すべてのOracle Databaseに含まれています。制御ファイルには、次の情報が格納されています。

  • データベース名

  • 対応するデータファイルとREDOログ・ファイルの名前と位置

  • データベース作成のタイムスタンプ

  • 現行のログ順序番号

  • チェックポイント情報

制御ファイルは、データベースがオープンしているときに必ずOracle Databaseサーバーが書き込めるように、使用可能にしておく必要があります。制御ファイルがないと、データベースがマウントできず、リカバリが困難になります。

Oracle Databaseの制御ファイルはデータベースとともに作成されます。デフォルトでは、データベースの作成時に、制御ファイルのコピーが少なくとも1つ作成されます。デフォルトで複数のコピーが作成されるオペレーティング・システムもあります。データベース作成時に、制御ファイルのコピーを2つ以上作成することをお薦めします。その後も、制御ファイルを失ったり、制御ファイル内の設定を変更する場合には、制御ファイルを作成できます。

制御ファイルのガイドライン

ここでは、データベースの制御ファイルを管理するためのガイドラインについて説明します。この項の内容は、次のとおりです。

制御ファイルのファイル名の指定

制御ファイル名は、データベース初期化パラメータ・ファイルのCONTROL_FILES初期化パラメータを使用して指定します(「初期制御ファイルの作成」を参照してください)。インスタンスは起動時にすべてのリストされたファイルを認識して開き、データベースの動作中はインスタンスがすべてのリストされた制御ファイルに書き込み、ファイルを維持します。

データベースの作成前にCONTROL_FILESに対してファイルを指定しない場合は、次のように処理されます。

  • Oracle Managed Filesを使用していない場合、データベースではデフォルトのファイル名で制御ファイルが作成されます。デフォルトのファイル名はオペレーティング・システムによって異なります。

  • Oracle Managed Filesを使用している場合は、この機能を使用可能にするために設定した初期化パラメータによって制御ファイルの名前と位置が決定されます(第17章「Oracle Managed Filesの使用」を参照)。

  • Oracle Automatic Storage Management(Oracle ASM)を使用している場合は、不完全なOracle ASMファイル名をDB_CREATE_FILE_DESTおよびDB_RECOVERY_FILE_DEST初期化パラメータに設定できます。Oracle ASMによって、制御ファイルが適切な場所に自動的に作成されます。詳細は、Oracle Automatic Storage Management管理者ガイドのOracle ASMファイル名に関する項、およびOracle ASMを使用するデータベースの作成に関する項を参照してください。

異なるディスク上での制御ファイルの多重化

Oracle Databaseには少なくとも2つの制御ファイルを作成し、各ファイルを異なる物理ディスクに配置するようにします。ディスク障害によって制御ファイルが破損した場合は、対応するインスタンスを必ず停止します。ディスク・ドライブを修復後、他のディスク上にある制御ファイルの正常なコピーを使用して破損した制御ファイルをリストアすると、インスタンスを再起動できます。この場合は、メディア・リカバリは不要です。

多重制御ファイルは、次のように動作します。

  • データベースは、データベース初期化パラメータ・ファイルの初期化パラメータCONTROL_FILESにリストされているすべてのファイル名に対して、情報を書き込みます。

  • データベースの稼働中に、CONTROL_FILESパラメータにリストされている最初のファイルのみデータベースによって読み込まれます。

  • データベースの稼働中に制御ファイルのいずれかが使用できなくなった場合、インスタンスは動作不能になり、異常終了します。


    注意:

    データベースには最低2つ以上の制御ファイルを作成し、それらを異なる物理ディスク上に配置することをお薦めします。

制御ファイルを多重化する方法の1つは、REDOログが多重化されている場合、REDOログ・グループのメンバーが格納されているすべてのディスク・ドライブに制御ファイルのコピーを格納することです。このようにファイルを配置することによって、単一のディスク障害のために制御ファイルとREDOログ・グループがすべて失われる危険が少なくなります。

制御ファイルのバックアップ

制御ファイルのバックアップは非常に重要です。初期設定時およびデータベースの物理構造を変更したときは、必ずバックアップを作成してください。たとえば、次のような構造上の変更を行った場合は、バックアップを作成する必要があります。

  • データファイルの追加、削除または名前変更

  • 表領域の追加または削除、表領域の読取り/書込み状態の変更

  • REDOログ・ファイルまたはREDOログ・グループの追加と削除

制御ファイルのバックアップ方法については、「制御ファイルのバックアップ」を参照してください。

制御ファイルのサイズ管理

制御ファイルのサイズを決定する主な要因は、対応するデータベースを作成したCREATE DATABASE文のMAXDATAFILESMAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORYおよびMAXINSTANCESパラメータに設定された値です。これらのパラメータの値を大きくすると、対応するデータベースの制御ファイルのサイズも大きくなります。


関連項目:

  • 制御ファイルの最大サイズの詳細は、使用しているオペレーティング・システム固有のOracleマニュアルを参照してください。

  • CREATE DATABASE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


制御ファイルの作成

ここでは、制御ファイルを作成する方法について説明します。この項の内容は、次のとおりです。

初期制御ファイルの作成

Oracle Databaseの初期制御ファイルは、CREATE DATABASE文を発行したときに作成されます。制御ファイルの名前は、データベースの作成時に使用される初期化パラメータ・ファイルのCONTROL_FILESパラメータで指定します。CONTROL_FILESで指定するファイル名はパスを含めて完全に指定する必要があり、オペレーティング・システムによって異なります。CONTROL_FILES初期化パラメータの例を次に示します。

CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
                 /u02/oracle/prod/control02.ctl, 
                 /u03/oracle/prod/control03.ctl)

指定した名前のファイルがデータベースの作成時に存在している場合、CREATE DATABASE文でCONTROLFILE REUSE句を指定しないとエラーが発生します。また、古い制御ファイルのサイズが新しい制御ファイルのSIZEパラメータと異なる場合、REUSE句は使用できません。

制御ファイルのサイズはOracle Databaseの一部のリリースでは異なり、制御ファイルで指定されるファイルの数が変更されるタイミングもリリースによって異なります。MAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORYMAXDATAFILESおよびMAXINSTANCESなどの構成パラメータは制御ファイルのサイズに影響します。

CONTROL_FILES初期化パラメータの値を後で変更して、制御ファイルを追加したり、既存の制御ファイルの名前や位置を変更できます。


関連項目:

制御ファイルの指定方法の詳細は、使用しているオペレーティング・システム固有のOracleマニュアルを参照してください。

制御ファイルの追加コピーの作成、名前変更および再配置

多重化のために制御ファイルのコピーを追加作成するには、既存の制御ファイルを新しい位置にコピーし、そのファイル名を制御ファイルのリストに追加します。同様に、制御ファイルの名前を変更するには、既存の制御ファイルを新しい名前や位置にコピーし、制御ファイル・リストのファイル名を変更します。どちらの場合も、作業中に制御ファイルが変更されないように、制御ファイルをコピーする前にデータベースを停止してください。

現行の制御ファイルの多重化コピーを追加、または制御ファイル名を変更する手順は、次のとおりです。

  1. データベースを停止します。

  2. オペレーティング・システムのコマンドを使用して、既存の制御ファイルを新しい位置にコピーします。

  3. データベース初期化パラメータ・ファイルのCONTROL_FILESパラメータを編集して、新しい制御ファイル名を追加するか、または既存の制御ファイル名を変更します。

  4. データベースを再起動します。

新しい制御ファイルの作成

ここでは、新しい制御ファイルを作成する場合とその方法について説明します。

新しい制御ファイルを作成する場合

次の状況の場合に、新しい制御ファイルを作成する必要があります。

  • データベースの制御ファイルがすべて破損し、制御ファイルのバックアップがない場合。

  • データベース名を変更する場合。

    たとえば、分散環境でデータベース名が別のデータベース名と競合する場合は、データベース名を変更します。


    注意:

    データベース名とDBID(内部データベース識別子)は、DBNEWIDユーティリティを使用して変更できます。このユーティリティの使用の詳細は、『Oracle Databaseユーティリティ』を参照してください。

  • 互換性レベルが10.2.0よりも前の値に設定されており、CREATE DATABASEまたはCREATE CONTROLFILEコマンドからの次のいずれかのパラメータに関係のあるデータベース構成の領域を変更する必要がある場合: MAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORYおよびMAXINSTANCES。互換性が10.2.0以後の場合、このような変更の際も新しい制御ファイルを作成する必要はなく、制御ファイルは必要に応じて新しい構成情報に対応するように自動的に拡張されます。

    たとえば、データベースの作成時、または制御ファイルの再作成時にMAXLOGFILESを3に設定したとします。そして、ALTER DATABASEコマンドを使用してデータベースに4つ目のREDOログ・ファイル・グループを追加するとします。互換性が10.2.0以後に設定されている場合、この変更は可能で、制御ファイルは新しいログ・ファイル情報に対応するように自動的に拡張されます。ただし、互換性が10.2.0よりも前に設定されている場合、ALTER DATABASEコマンドを実行するとエラーが発生し、先に新しい制御ファイルを作成する必要があります。

    互換性レベルの詳細は、「COMPATIBLE初期化パラメータの概要」を参照してください。

CREATE CONTROLFILE文

CREATE CONTROLFILE文を使用して、データベースの新しい制御ファイルを作成できます。次の文は、prodデータベース(これまで別のデータベース名を使用していたデータベース)に対する新しい制御ファイルを作成します。

CREATE CONTROLFILE
   SET DATABASE prod
   LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log', 
                    '/u01/oracle/prod/redo01_02.log'),
           GROUP 2 ('/u01/oracle/prod/redo02_01.log', 
                    '/u01/oracle/prod/redo02_02.log'),
           GROUP 3 ('/u01/oracle/prod/redo03_01.log', 
                    '/u01/oracle/prod/redo03_02.log') 
   RESETLOGS
   DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
            '/u01/oracle/prod/rbs01.dbs' SIZE 5M,
            '/u01/oracle/prod/users01.dbs' SIZE 5M,
            '/u01/oracle/prod/temp01.dbs' SIZE 5M
   MAXLOGFILES 50
   MAXLOGMEMBERS 3
   MAXLOGHISTORY 400
   MAXDATAFILES 200
   MAXINSTANCES 6
   ARCHIVELOG;

注意:

  • CREATE CONTROLFILE文は、指定したデータファイルとREDOログ・ファイルを破損する可能性があります。ファイル名を省略すると、そのファイルのデータが失われたり、データベース全体にアクセスできなくなる場合があります。この文を発行するときには十分に注意し、必ず「新しい制御ファイルの作成手順」の手順に従ってください。

  • 新しい制御ファイルを作成する前にデータベースのFORCE LOGGINGを使用可能にしていて、この設定を引き続き有効にする場合は、CREATE CONTROLFILE文でFORCE LOGGING句を指定する必要があります。「FORCE LOGGINGモードの指定」を参照してください。



関連項目:

CREATE CONTROLFILE文の詳細な構文は、『Oracle Database SQL言語リファレンス』を参照してください。

新しい制御ファイルの作成手順

新しい制御ファイルを作成するには、次の手順を実行します。

  1. データベースのデータファイルとREDOログ・ファイルすべてのリストを作成します。

    「制御ファイルのバックアップ」に記載されている制御ファイルのバックアップの推奨事項に従っている場合は、現在のデータベース構造を反映するデータファイルとREDOログ・ファイルのリストがすでに作成されています。しかし、そのようなリストがない場合は、次の文を実行することでリストが生成されます。

    SELECT MEMBER FROM V$LOGFILE;
    SELECT NAME FROM V$DATAFILE; 
    SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
    

    このようなリストが手元になく、制御ファイルが破損してデータベースをオープンできない場合は、データベースを構成するデータファイルとREDOログ・ファイルをすべて特定してください。新しい制御ファイルを作成すると、手順5で指定したファイル以外はリカバリできなくなります。さらに、SYSTEM表領域を構成するファイルが1つでも欠落していると、データベースをリカバリできないことがあります。

  2. データベースを停止します。

    データベースがオープンしている場合は、できるかぎり通常モードでデータベースを停止します。IMMEDIATE句またはABORT句は、他に方法がない場合にのみ使用してください。

  3. データベースのすべてのデータファイルとREDOログ・ファイルをバックアップします。

  4. 新しいインスタンスを起動します。ただし、データベースのマウントとオープンは行いません。

    STARTUP NOMOUNT
    
  5. CREATE CONTROLFILE文を使用して、データベースの新しい制御ファイルを作成します。

    制御ファイルに加えて、REDOログ・グループも失ってしまった場合は、新しい制御ファイルの作成時にRESETLOGS句を指定します。この場合は、失ったREDOログをリカバリする必要があります(手順8)。データベースの名前を変更した場合は、必ずRESETLOGS句を指定してください。それ以外の場合は、NORESETLOGS句を選択してください。

  6. 新しい制御ファイルのバックアップをオフラインの記憶デバイスに格納します。バックアップ作成の手順については、「制御ファイルのバックアップ」を参照してください。

  7. データベースのCONTROL_FILES初期化パラメータを編集し、手順5で作成してデータベースの一部となったすべての制御ファイルを指定します(バックアップ制御ファイルは含めません)。データベースの名前を変更する場合、インスタンスのパラメータ・ファイルのDB_NAMEパラメータを編集して新しい名前を指定します。

  8. 必要に応じて、データベースをリカバリします。データベースをリカバリしない場合は、手順9にスキップしてください。

    リカバリの一部として制御ファイルを作成している場合は、データベースをリカバリしてください。NORESETLOGS句を使用して新しい制御ファイルを作成した場合(手順5)は、クローズ状態の完全なデータベース・リカバリ操作によってデータベースをリカバリできます。

    RESETLOGS句を使用して新しい制御ファイルを作成した場合は、USING BACKUP CONTROL FILEを指定する必要があります。オンラインまたはアーカイブREDOログあるいはデータファイルが失われた場合は、これらのファイルのリカバリ手順に従ってください。


    関連項目:

    データベースのリカバリ、および失われた制御ファイルのリカバリ方法については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  9. 次のいずれかの方法で、データベースをオープンします。

    • リカバリを実行しなかった場合、または手順8でクローズ状態の完全なデータベース・リカバリを実行した場合は、通常の手順でデータベースをオープンします。

      ALTER DATABASE OPEN; 
      
    • 制御ファイルの作成時にRESETLOGSを指定した場合は、ALTER DATABASE文でRESETLOGSを指定します。

      ALTER DATABASE OPEN RESETLOGS;
      

これでデータベースはオープンされ、使用可能になります。

制御ファイル作成後のトラブルシューティング

CREATE CONTROLFILE文を実行した後で、エラーが発生する場合があります。ここでは、制御ファイルに関連する最も一般的なエラーについて説明します。

欠落したファイルや余分なファイルのチェック

新しい制御ファイルを作成し、それを使用してデータベースをオープンした後、アラート・ログをチェックして、データ・ディクショナリと制御ファイルの間で不整合(データ・ディクショナリにはデータファイルがあるが、制御ファイルには含まれていないなど)が検出されていないかを確認してください。

データ・ディクショナリ内にはデータファイルが存在していて、新しい制御ファイルには含まれていない場合、データベースは制御ファイル内にMISSINGnnnn(nnnnは10進数のファイル番号)という名前のプレースホルダ・エントリを作成します。制御ファイル内のMISSINGnnnnには、オフラインであること、およびメディア・リカバリを必要とすることを示すフラグが設定されます。

MISSINGnnnnに対応する実際のデータファイルが読取り専用または通常のオフラインである場合、MISSINGnnnnの名前を実際のデータファイルの名前に変更することによってデータファイルにアクセス可能になります。MISSINGnnnnに対応するデータファイルが読取り専用または通常のオフラインではない場合、データファイルはメディア・リカバリを必要としますが、RESETLOGSの結果これができないため、名前の変更操作によってデータファイルをアクセス可能にできません。この場合、データファイルを含む表領域を削除する必要があります。

反対に、制御ファイルに指定されているデータファイルがデータ・ディクショナリに存在しない場合、データベースは新しい制御ファイルからそのファイルへの参照を削除します。どちらの場合も、検出された状態を通知するメッセージがアラート・ログに書き込まれます。

CREATE CONTROLFILEでのエラー処理

新しい制御ファイルの作成後、データベースをマウントしてオープンしようとしたときにOracle Databaseでエラー(通常、ORA-01173ORA-01176ORA-01177ORA-01215ORA-01216のいずれか)が出力された場合、そのエラーの最も可能性の高い原因は、CREATE CONTROLFILE文でファイルを省略したか、またはリストに示されていないファイルを指定したかのいずれかです。この場合は、手順3で作成したバックアップのファイルをリストアし、正しいファイル名を使用して手順4以降を再実行してください。

制御ファイルのバックアップ

制御ファイルをバックアップするには、ALTER DATABASE BACKUP CONTROLFILE文を使用します。次の2つのオプションがあります。

  • 次の文を使用して、制御ファイルをバイナリ・ファイル(既存の制御ファイルの複製)にバックアップを作成します。

    ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
    
  • 後で制御ファイルの再作成に使用できるSQL文を生成します。

    ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
    

    このコマンドによってSQLスクリプトがトレース・ファイルに書き込まれ、これを取得および編集して制御ファイルを再作成できます。トレース・ファイルの名前と場所は、アラート・ログで調べられます。


    関連項目:

    • 制御ファイルのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

    • 「アラート・ログの表示」


現行のコピーを使用した制御ファイルのリカバリ

ここでは、現行のバックアップまたは多重化コピーから制御ファイルをリカバリする方法について説明します。

制御ファイルのコピーを使用した制御ファイル破損からのリカバリ

この手順では、CONTROL_FILESパラメータで指定されている制御ファイルの1つが破損し、制御ファイルのディレクトリにはまだアクセス可能で、制御ファイルの多重化コピーがある場合を想定しています。

  1. インスタンスを停止してから、オペレーティング・システム・コマンドを使用して、破損した制御ファイルに正常なコピーを上書きします。

    % cp /u03/oracle/prod/control03.ctl  /u02/oracle/prod/control02.ctl
    
  2. SQL*Plusを起動してデータベースをオープンします。

    SQL> STARTUP
    

制御ファイルのコピーを使用した永続的なメディア障害からのリカバリ

この手順では、永続的なメディア障害のために、CONTROL_FILESパラメータで指定されている制御ファイルの1つにアクセスできず、制御ファイルの多重化コピーがある場合を想定しています。

  1. インスタンスを停止してから、オペレーティング・システム・コマンドを使用して、制御ファイルの現行のコピーをアクセス可能な新しい位置にコピーします。

    % cp /u01/oracle/prod/control01.ctl  /u04/oracle/prod/control03.ctl
    
  2. 初期化パラメータ・ファイルのCONTROL_FILESパラメータを編集し、破損したファイルの位置を新しい位置に置き換えます。

    CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
                     /u02/oracle/prod/control02.ctl, 
                     /u04/oracle/prod/control03.ctl)
    
  3. SQL*Plusを起動してデータベースをオープンします。

    SQL> STARTUP
    

多重制御ファイルがある場合は、CONTROL_FILES初期化パラメータを編集することで、データベースを迅速に起動できます。破損した制御ファイルをCONTROL_FILES設定から削除すると、即時にデータベースを再起動できます。次に、破損した制御ファイルを再作成し、CONTROL_FILES初期化パラメータにリカバリした制御ファイルを設定してから、データベースを停止し、再起動します。

制御ファイルの削除

たとえば、制御ファイルの位置が不適切な場合は、データベースからその制御ファイルを削除できます。ただし、データベースには常に少なくとも2つの制御ファイルが存在する必要があります。

  1. データベースを停止します。

  2. データベース初期化パラメータ・ファイルのCONTROL_FILESパラメータを編集して、古い制御ファイル名を削除します。

  3. データベースを再起動します。


    注意:

    この操作では、不要な制御ファイルをディスクから物理的に削除することはできません。データベースから制御ファイルを削除した後、オペレーティング・システムのコマンドを使用して不要なファイルを削除してください。

制御ファイルのデータ・ディクショナリ・ビュー

次のビューには、制御ファイルに関する情報が表示されます。

ビュー 説明
V$DATABASE 制御ファイル内のデータベース情報が表示されます。
V$CONTROLFILE 制御ファイル名が一覧表示されます。
V$CONTROLFILE_RECORD_SECTION 制御ファイルのレコード・セクションに関する情報が表示されます。
V$PARAMETER CONTROL_FILES初期化パラメータで指定されている制御ファイルの名前が表示されます。

この例では、制御ファイル名が一覧表示されます。

SQL> SELECT NAME FROM V$CONTROLFILE;

NAME
-------------------------------------
/u01/oracle/prod/control01.ctl
/u02/oracle/prod/control02.ctl 
/u03/oracle/prod/control03.ctl