この章の内容は、次のとおりです。
関連項目:
|
制御ファイルはデータベースの物理構造を記録した小さなバイナリ・ファイルであり、すべての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
文のMAXDATAFILES
、MAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
およびMAXINSTANCES
パラメータに設定された値です。これらのパラメータの値を大きくすると、対応するデータベースの制御ファイルのサイズも大きくなります。
関連項目:
|
ここでは、制御ファイルを作成する方法について説明します。この項の内容は、次のとおりです。
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の一部のリリースでは異なり、制御ファイルで指定されるファイルの数が変更されるタイミングもリリースによって異なります。MAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
、MAXDATAFILES
およびMAXINSTANCES
などの構成パラメータは制御ファイルのサイズに影響します。
CONTROL_FILES
初期化パラメータの値を後で変更して、制御ファイルを追加したり、既存の制御ファイルの名前や位置を変更できます。
関連項目: 制御ファイルの指定方法の詳細は、使用しているオペレーティング・システム固有のOracleマニュアルを参照してください。 |
多重化のために制御ファイルのコピーを追加作成するには、既存の制御ファイルを新しい位置にコピーし、そのファイル名を制御ファイルのリストに追加します。同様に、制御ファイルの名前を変更するには、既存の制御ファイルを新しい名前や位置にコピーし、制御ファイル・リストのファイル名を変更します。どちらの場合も、作業中に制御ファイルが変更されないように、制御ファイルをコピーする前にデータベースを停止してください。
現行の制御ファイルの多重化コピーを追加、または制御ファイル名を変更する手順は、次のとおりです。
データベースを停止します。
オペレーティング・システムのコマンドを使用して、既存の制御ファイルを新しい位置にコピーします。
データベース初期化パラメータ・ファイルのCONTROL_FILES
パラメータを編集して、新しい制御ファイル名を追加するか、または既存の制御ファイル名を変更します。
データベースを再起動します。
ここでは、新しい制御ファイルを作成する場合とその方法について説明します。
次の状況の場合に、新しい制御ファイルを作成する必要があります。
データベースの制御ファイルがすべて破損し、制御ファイルのバックアップがない場合。
データベース名を変更する場合。
たとえば、分散環境でデータベース名が別のデータベース名と競合する場合は、データベース名を変更します。
注意: データベース名とDBID(内部データベース識別子)は、DBNEWIDユーティリティを使用して変更できます。このユーティリティの使用の詳細は、『Oracle Databaseユーティリティ』を参照してください。 |
互換性レベルが10.2.0よりも前の値に設定されており、CREATE
DATABASE
またはCREATE
CONTROLFILE
コマンドからの次のいずれかのパラメータに関係のあるデータベース構成の領域を変更する必要がある場合: MAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
およびMAXINSTANCES
。互換性が10.2.0以後の場合、このような変更の際も新しい制御ファイルを作成する必要はなく、制御ファイルは必要に応じて新しい構成情報に対応するように自動的に拡張されます。
たとえば、データベースの作成時、または制御ファイルの再作成時にMAXLOGFILES
を3に設定したとします。そして、ALTER DATABASE
コマンドを使用してデータベースに4つ目のREDOログ・ファイル・グループを追加するとします。互換性が10.2.0以後に設定されている場合、この変更は可能で、制御ファイルは新しいログ・ファイル情報に対応するように自動的に拡張されます。ただし、互換性が10.2.0よりも前に設定されている場合、ALTER DATABASE
コマンドを実行するとエラーが発生し、先に新しい制御ファイルを作成する必要があります。
互換性レベルの詳細は、「COMPATIBLE初期化パラメータの概要」を参照してください。
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文の詳細な構文は、『Oracle Database SQL言語リファレンス』 を参照してください。 |
新しい制御ファイルを作成するには、次の手順を実行します。
データベースのデータファイルと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つでも欠落していると、データベースをリカバリできないことがあります。
データベースを停止します。
データベースがオープンしている場合は、できるかぎり通常モードでデータベースを停止します。IMMEDIATE
句またはABORT
句は、他に方法がない場合にのみ使用してください。
データベースのすべてのデータファイルとREDOログ・ファイルをバックアップします。
新しいインスタンスを起動します。ただし、データベースのマウントとオープンは行いません。
STARTUP NOMOUNT
CREATE CONTROLFILE
文を使用して、データベースの新しい制御ファイルを作成します。
制御ファイルに加えて、REDOログ・グループも失ってしまった場合は、新しい制御ファイルの作成時にRESETLOGS
句を指定します。この場合は、失ったREDOログをリカバリする必要があります(手順8)。データベースの名前を変更した場合は、必ずRESETLOGS
句を指定してください。それ以外の場合は、NORESETLOGS
句を選択してください。
新しい制御ファイルのバックアップをオフラインの記憶デバイスに格納します。バックアップ作成の手順については、「制御ファイルのバックアップ」を参照してください。
データベースのCONTROL_FILES
初期化パラメータを編集し、手順5で作成してデータベースの一部となったすべての制御ファイルを指定します(バックアップ制御ファイルは含めません)。データベースの名前を変更する場合、インスタンスのパラメータ・ファイルのDB_NAME
パラメータを編集して新しい名前を指定します。
必要に応じて、データベースをリカバリします。データベースをリカバリしない場合は、手順9にスキップしてください。
リカバリの一部として制御ファイルを作成している場合は、データベースをリカバリしてください。NORESETLOGS
句を使用して新しい制御ファイルを作成した場合(手順5)は、クローズ状態の完全なデータベース・リカバリ操作によってデータベースをリカバリできます。
RESETLOGS
句を使用して新しい制御ファイルを作成した場合は、USING BACKUP CONTROL FILE
を指定する必要があります。オンラインまたはアーカイブREDOログあるいはデータファイルが失われた場合は、これらのファイルのリカバリ手順に従ってください。
関連項目: データベースのリカバリ、および失われた制御ファイルのリカバリ方法については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 |
次のいずれかの方法で、データベースをオープンします。
リカバリを実行しなかった場合、または手順8でクローズ状態の完全なデータベース・リカバリを実行した場合は、通常の手順でデータベースをオープンします。
ALTER DATABASE OPEN;
制御ファイルの作成時にRESETLOGS
を指定した場合は、ALTER DATABASE
文でRESETLOGS
を指定します。
ALTER DATABASE OPEN RESETLOGS;
これでデータベースはオープンされ、使用可能になります。
CREATE CONTROLFILE
文を実行した後で、エラーが発生する場合があります。ここでは、制御ファイルに関連する最も一般的なエラーについて説明します。
新しい制御ファイルを作成し、それを使用してデータベースをオープンした後、アラート・ログをチェックして、データ・ディクショナリと制御ファイルの間で不整合(データ・ディクショナリにはデータファイルがあるが、制御ファイルには含まれていないなど)が検出されていないかを確認してください。
データ・ディクショナリ内にはデータファイルが存在していて、新しい制御ファイルには含まれていない場合、データベースは制御ファイル内にMISSING
nnnn
(nnnn
は10進数のファイル番号)という名前のプレースホルダ・エントリを作成します。制御ファイル内のMISSING
nnnn
には、オフラインであること、およびメディア・リカバリを必要とすることを示すフラグが設定されます。
MISSING
nnnn
に対応する実際のデータファイルが読取り専用または通常のオフラインである場合、MISSING
nnnn
の名前を実際のデータファイルの名前に変更することによってデータファイルにアクセス可能になります。MISSING
nnnn
に対応するデータファイルが読取り専用または通常のオフラインではない場合、データファイルはメディア・リカバリを必要としますが、RESETLOGS
の結果これができないため、名前の変更操作によってデータファイルをアクセス可能にできません。この場合、データファイルを含む表領域を削除する必要があります。
反対に、制御ファイルに指定されているデータファイルがデータ・ディクショナリに存在しない場合、データベースは新しい制御ファイルからそのファイルへの参照を削除します。どちらの場合も、検出された状態を通知するメッセージがアラート・ログに書き込まれます。
制御ファイルをバックアップするには、ALTER DATABASE BACKUP CONTROLFILE
文を使用します。次の2つのオプションがあります。
次の文を使用して、制御ファイルをバイナリ・ファイル(既存の制御ファイルの複製)にバックアップを作成します。
ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
後で制御ファイルの再作成に使用できるSQL文を生成します。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
このコマンドによってSQLスクリプトがトレース・ファイルに書き込まれ、これを取得および編集して制御ファイルを再作成できます。トレース・ファイルの名前と場所は、アラート・ログで調べられます。
ここでは、現行のバックアップまたは多重化コピーから制御ファイルをリカバリする方法について説明します。
この手順では、CONTROL_FILES
パラメータで指定されている制御ファイルの1つが破損し、制御ファイルのディレクトリにはまだアクセス可能で、制御ファイルの多重化コピーがある場合を想定しています。
インスタンスを停止してから、オペレーティング・システム・コマンドを使用して、破損した制御ファイルに正常なコピーを上書きします。
% cp /u03/oracle/prod/control03.ctl /u02/oracle/prod/control02.ctl
SQL*Plusを起動してデータベースをオープンします。
SQL> STARTUP
この手順では、永続的なメディア障害のために、CONTROL_FILES
パラメータで指定されている制御ファイルの1つにアクセスできず、制御ファイルの多重化コピーがある場合を想定しています。
インスタンスを停止してから、オペレーティング・システム・コマンドを使用して、制御ファイルの現行のコピーをアクセス可能な新しい位置にコピーします。
% cp /u01/oracle/prod/control01.ctl /u04/oracle/prod/control03.ctl
初期化パラメータ・ファイルのCONTROL_FILES
パラメータを編集し、破損したファイルの位置を新しい位置に置き換えます。
CONTROL_FILES = (/u01/oracle/prod/control01.ctl, /u02/oracle/prod/control02.ctl, /u04/oracle/prod/control03.ctl)
SQL*Plusを起動してデータベースをオープンします。
SQL> STARTUP
多重制御ファイルがある場合は、CONTROL_FILES
初期化パラメータを編集することで、データベースを迅速に起動できます。破損した制御ファイルをCONTROL_FILES
設定から削除すると、即時にデータベースを再起動できます。次に、破損した制御ファイルを再作成し、CONTROL_FILES
初期化パラメータにリカバリした制御ファイルを設定してから、データベースを停止し、再起動します。
たとえば、制御ファイルの位置が不適切な場合は、データベースからその制御ファイルを削除できます。ただし、データベースには常に少なくとも2つの制御ファイルが存在する必要があります。
データベースを停止します。
データベース初期化パラメータ・ファイルのCONTROL_FILES
パラメータを編集して、古い制御ファイル名を削除します。
データベースを再起動します。
注意: この操作では、不要な制御ファイルをディスクから物理的に削除することはできません。データベースから制御ファイルを削除した後、オペレーティング・システムのコマンドを使用して不要なファイルを削除してください。 |
次のビューには、制御ファイルに関する情報が表示されます。
ビュー | 説明 |
---|---|
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