Oracle Database 管理者ガイド 11gリリース1(11.1) E05760-03 |
|
この章の内容は次のとおりです。
制御ファイルはデータベースの物理構造を記録した小さなバイナリ・ファイルであり、すべてのOracle Databaseに含まれています。制御ファイルには、次の情報が格納されています。
制御ファイルは、データベースがオープンしているときに必ずOracle Databaseサーバーが書き込めるように、使用可能にしておく必要があります。制御ファイルがないと、データベースがマウントできず、リカバリが困難になります。
Oracle Databaseの制御ファイルはデータベースとともに作成されます。デフォルトでは、データベースの作成時に、制御ファイルのコピーが少なくとも1つ作成されます。デフォルトで複数のコピーが作成されるオペレーティング・システムもあります。データベース作成時に、制御ファイルのコピーを2つ以上作成することをお薦めします。その後も、制御ファイルを失ったり、制御ファイル内の設定を変更する場合には、制御ファイルを作成できます。
ここでは、データベースの制御ファイルを管理するためのガイドラインについて説明します。この項の内容は、次のとおりです。
データベース初期化パラメータ・ファイルのCONTROL_FILES
初期化パラメータを使用して、制御ファイルの名前を指定します(「初期制御ファイルの作成」を参照してください)。インスタンスは、起動時に、指定されたすべてのファイルを認識してオープンします。さらに、データベースの稼働中、指定されたすべての制御ファイルに情報を書き込み、メンテナンスします。
データベースの作成前にCONTROL_FILES
に対してファイルを指定しない場合は、次のように処理されます。
DB_CREATE_FILE_DEST
およびDB_RECOVERY_FILE_DEST
初期化パラメータに設定できます。ASMによって、制御ファイルが適切な場所に自動的に作成されます。 詳細は、『Oracle Databaseストレージ管理者ガイド』のASMファイル名の概要およびASMを使用するデータベースの作成に関する項を参照してください。
Oracle Databaseには少なくとも2つの制御ファイルを作成し、各ファイルを異なる物理ディスクに配置するようにします。ディスク障害によって制御ファイルが破損した場合は、対応するインスタンスを必ず停止します。ディスク・ドライブを修復後、他のディスク上にある制御ファイルの正常なコピーを使用して破損した制御ファイルをリストアすると、インスタンスを再起動できます。この場合は、メディア・リカバリは不要です。
多重制御ファイルは、次のように動作します。
CONTROL_FILES
にリストされているすべてのファイル名に対して、情報を書き込みます。
CONTROL_FILES
パラメータにリストされている最初のファイルのみデータベースによって読み込まれます。
制御ファイルを多重化する方法の1つは、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
初期化パラメータの値を後で変更して、制御ファイルを追加したり、既存の制御ファイルの名前や位置を変更できます。
多重化のために制御ファイルのコピーを追加作成するには、既存の制御ファイルを新しい位置にコピーし、そのファイル名を制御ファイルのリストに追加します。同様に、制御ファイルの名前を変更するには、既存の制御ファイルを新しい名前や位置にコピーし、制御ファイル・リストのファイル名を変更します。どちらの場合も、作業中に制御ファイルが変更されないように、制御ファイルをコピーする前にデータベースを停止してください。
現行の制御ファイルの多重化コピーを追加、または制御ファイル名を変更する手順は、次のとおりです。
CONTROL_FILES
パラメータを編集して、新しい制御ファイル名を追加するか、または既存の制御ファイル名を変更します。
ここでは、新しい制御ファイルを作成する場合とその方法について説明します。
次の状況の場合に、新しい制御ファイルを作成する必要があります。
たとえば、分散環境でデータベース名が別のデータベース名と競合する場合は、データベース名を変更します。
CREATE
DATABASE
コマンドまたはCREATE
CONTROLFILE
コマンドのMAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
およびMAXINSTANCES
のいずれかのパラメータに関連するデータベース構成の領域を変更する必要がある場合。互換性が10.2.0以上の場合は、このような変更を加えるときに新しい制御ファイルを作成する必要はありません。制御ファイルは、新しい構成情報を格納できるように、必要に応じて自動的に拡張されます。たとえば、データベースを作成または制御ファイルを再作成したときに、MAXLOGFILES
を3に設定したとします。次に、4つ目のREDOログ・ファイル・グループを、ALTER DATABASE
コマンドを使用してデータベースに追加するとします。互換性が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;
注意:
|
新しい制御ファイルを作成するには、次の手順を実行します。
「制御ファイルのバックアップ」に記載されている制御ファイルのバックアップの推奨事項に従っている場合は、現在のデータベース構造を反映するデータファイルと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
句は、他に方法がない場合にのみ使用してください。
STARTUP NOMOUNT
CREATE CONTROLFILE
文を使用して、データベースの新しい制御ファイルを作成します。制御ファイルに加えて、REDOログ・グループも失ってしまった場合は、新しい制御ファイルの作成時にRESETLOGS
句を指定します。この場合は、失ったREDOログをリカバリする必要があります(手順8)。データベースの名前を変更した場合は、必ずRESETLOGS
句を指定してください。それ以外の場合は、NORESETLOGS
句を選択してください。
CONTROL_FILES
初期化パラメータを編集し、手順5で作成したすべての制御ファイルがデータベースの新しい一部となるように指定します。ただし、バックアップ制御ファイルは含めません。データベースの名前を変更する場合は、インスタンス・パラメータ・ファイルのDB_NAME
パラメータを編集して新しい名前を指定します。
リカバリの一部として制御ファイルを作成している場合は、データベースをリカバリしてください。NORESETLOGS
句を使用して新しい制御ファイルを作成した場合(手順5)は、クローズ状態の完全なデータベース・リカバリ操作によってデータベースをリカバリできます。
RESETLOGS
句を使用して新しい制御ファイルを作成した場合は、USING BACKUP CONTROL FILE
を指定する必要があります。オンラインまたはアーカイブREDOログあるいはデータファイルが失われた場合は、これらのファイルのリカバリ手順に従ってください。
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
の結果によって使用できなくなったデータファイルには、メディア・リカバリが必要なためです。この場合は、データファイルを含む表領域を削除する必要があります。
反対に、制御ファイルに指定されているデータファイルがデータ・ディクショナリに存在しない場合、データベースは新しい制御ファイルからそのファイルへの参照を削除します。どちらの場合も、検出された状態を通知するメッセージがアラート・ログに書き込まれます。
新しい制御ファイルの作成後、データベースをマウントしてオープンしようとしたときにOracle Databaseでエラー(通常、ORA-01173
、ORA-01176
、ORA-01177
、ORA-01215
、ORA-01216
のいずれか)が出力された場合、そのエラーの最も可能性の高い原因は、CREATE CONTROLFILE
文でファイルを省略したか、またはリストに示されていないファイルを指定したかのいずれかです。この場合は、手順3で作成したバックアップのファイルをリストアし、正しいファイル名を使用して手順4以降を再実行してください。
制御ファイルをバックアップするには、ALTER DATABASE BACKUP CONTROLFILE
文を使用します。次の2つの方法があります。
ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
このコマンドは、トレース・ファイルにSQLスクリプトを書き込みます。書き込まれたSQLスクリプトは、制御ファイルを再作成するために、トレース・ファイルから取得して編集できます。トレース・ファイルの名前と場所を確認するには、アラート・ログを表示します。
ここでは、現行のバックアップまたは多重化コピーから制御ファイルをリカバリする方法について説明します。
この手順では、CONTROL_FILES
パラメータで指定されている制御ファイルの1つが破損し、制御ファイルのディレクトリにはまだアクセス可能で、制御ファイルの多重化コピーがある場合を想定しています。
% cp /u03/oracle/prod/control03.ctl /u02/oracle/prod/control02.ctl
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> STARTUP
多重制御ファイルがある場合は、CONTROL_FILES
初期化パラメータを編集することで、データベースを迅速に起動できます。破損した制御ファイルをCONTROL_FILES
設定から削除すると、即時にデータベースを再起動できます。次に、破損した制御ファイルを再作成し、CONTROL_FILES
初期化パラメータにリカバリした制御ファイルを設定してから、データベースを停止し、再起動します。
たとえば、制御ファイルの位置が不適切な場合は、データベースからその制御ファイルを削除できます。ただし、データベースには常に少なくとも2つの制御ファイルが存在する必要があります。
次のビューには、制御ファイルに関する情報が表示されます。
ビュー | 説明 |
---|---|
|
制御ファイル内のデータベース情報が表示されます。 |
|
制御ファイル名が一覧表示されます。 |
|
制御ファイルのレコード・セクションに関する情報が表示されます。 |
|
|
この例では、制御ファイル名が一覧表示されます。
SQL> SELECT NAME FROM V$CONTROLFILE; NAME ------------------------------------- /u01/oracle/prod/control01.ctl /u02/oracle/prod/control02.ctl /u03/oracle/prod/control03.ctl