10 制御ファイルの管理
制御ファイルを作成、バックアップおよび削除できます。
- 制御ファイルの概要
制御ファイルはデータベースの物理構造を記録した小さなバイナリ・ファイルであり、すべてのOracle Databaseに含まれています。 - 制御ファイルのガイドライン
ガイドラインに従って、データベースの制御ファイルを管理できます。 - 制御ファイルの作成
制御ファイルを作成、コピー、名前変更および再配置できます。 - 制御ファイル作成後のトラブルシューティング
CREATE CONTROLFILE
文を実行した後で、エラーが発生する場合があります。 - 制御ファイルのバックアップ
制御ファイルをバックアップするには、ALTER DATABASE BACKUP CONTROLFILE
文を使用します。 - 現行のコピーを使用した制御ファイルのリカバリ
現行のバックアップまたは多重化コピーから制御ファイルをリカバリできます。 - 制御ファイルの削除
制御ファイルは削除できますが、データベースには常に少なくとも2つの制御ファイルが存在する必要があります。 - 制御ファイルのデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットに対して制御ファイルに関する情報を問い合せることができます。
関連項目:
-
制御ファイルの概要は、『Oracle Database概要』を参照してください。
-
Oracle Databaseサーバーによって作成および管理される制御ファイルの作成方法は、「Oracle Managed Filesの使用」を参照してください
親トピック: Oracle Databaseの構造と記憶域
10.1 制御ファイルの概要
制御ファイルはデータベースの物理構造を記録した小さなバイナリ・ファイルであり、すべてのOracle Databaseに含まれています。
制御ファイルには、次の情報が格納されています。
-
データベース名
-
対応するデータファイルとREDOログ・ファイルの名前と位置
-
データベース作成のタイムスタンプ
-
現行のログ順序番号
-
チェックポイント情報
制御ファイルは、データベースがオープンしているときに必ずOracle Databaseサーバーが書き込めるように、使用可能にしておく必要があります。制御ファイルがないと、データベースがマウントできず、リカバリが困難になります。
Oracle Databaseの制御ファイルはデータベースとともに作成されます。デフォルトでは、データベースの作成時に、制御ファイルのコピーが少なくとも1つ作成されます。デフォルトで複数のコピーが作成されるオペレーティング・システムもあります。データベース作成時に、制御ファイルのコピーを2つ以上作成することをお薦めします。その後も、制御ファイルを失ったり、制御ファイル内の設定を変更する場合には、制御ファイルを作成できます。
親トピック: 制御ファイルの管理
10.2 制御ファイルのガイドライン
ガイドラインに従って、データベースの制御ファイルを管理できます。
- 制御ファイルのファイル名の指定
データベース初期化パラメータ・ファイルのCONTROL_FILES
初期化パラメータを使用して、制御ファイル名を指定します。インスタンスは起動時にすべてのリストされたファイルを認識して開き、データベースの動作中はインスタンスがすべてのリストされた制御ファイルに書き込み、ファイルを維持します。 - 異なるディスク上での制御ファイルの多重化
Oracle Databaseには少なくとも2つの制御ファイルを作成し、各ファイルを異なる物理ディスクに配置するようにします。 - 制御ファイルのバックアップ
制御ファイルのバックアップは非常に重要です。初期設定時およびデータベースの物理構造を変更したときは、必ずバックアップを作成してください。 - 制御ファイルのサイズ管理
制御ファイルのサイズを決定する主な要因は、対応するデータベースを作成したCREATE DATABASE
文のMAXDATAFILES
、MAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
およびMAXINSTANCES
パラメータに設定された値です。
親トピック: 制御ファイルの管理
10.2.1 制御ファイルのファイル名の指定
データベース初期化パラメータ・ファイルのCONTROL_FILES
初期化パラメータを使用して、制御ファイル名を指定します。インスタンスは起動時にすべてのリストされたファイルを認識して開き、データベースの動作中はインスタンスがすべてのリストされた制御ファイルに書き込み、ファイルを維持します。
データベースの作成前にCONTROL_FILES
に対してファイルを指定しない場合は、次のように処理されます。
-
Oracle Managed Filesを使用していない場合、データベースではデフォルトのファイル名で制御ファイルが作成されます。デフォルトのファイル名はオペレーティング・システムによって異なります。
-
Oracle Managed Filesを使用している場合は、この機能を使用可能にするために設定した初期化パラメータによって制御ファイルの名前と位置が決定されます。
-
Oracle Automatic Storage Management (Oracle ASM)を使用している場合は、不完全なOracle ASMファイル名を
DB_CREATE_FILE_DEST
およびDB_RECOVERY_FILE_DEST
初期化パラメータに設定できます。Oracle ASMによって、制御ファイルが適切な場所に自動的に作成されます。
10.2.2 異なるディスク上での制御ファイルの多重化
Oracle Databaseには少なくとも2つの制御ファイルを作成し、各ファイルを異なる物理ディスクに配置するようにします。
ディスク障害によって制御ファイルが破損した場合は、対応するインスタンスを必ず停止します。ディスク・ドライブを修復後、他のディスク上にある制御ファイルの正常なコピーを使用して破損した制御ファイルをリストアすると、インスタンスを再起動できます。この場合は、メディア・リカバリは不要です。
多重制御ファイルは、次のように動作します。
-
データベースは、データベース初期化パラメータ・ファイルの初期化パラメータ
CONTROL_FILES
にリストされているすべてのファイル名に対して、情報を書き込みます。 -
データベースの稼働中に、
CONTROL_FILES
パラメータにリストされている最初のファイルのみデータベースによって読み込まれます。 -
データベースの稼働中に制御ファイルのいずれかが使用できなくなった場合、インスタンスは動作不能になり、異常終了します。
注意:
データベースには最低2つ以上の制御ファイルを作成し、それらを異なる物理ディスク上に配置することをお薦めします。
制御ファイルを多重化する方法の1つは、REDOログが多重化されている場合、REDOログ・グループのメンバーが格納されているすべてのディスク・ドライブに制御ファイルのコピーを格納することです。このようにファイルを配置することによって、単一のディスク障害のために制御ファイルとREDOログ・グループがすべて失われる危険が少なくなります。
親トピック: 制御ファイルのガイドライン
10.2.3 制御ファイルのバックアップ
制御ファイルのバックアップは非常に重要です。初期設定時およびデータベースの物理構造を変更したときは、必ずバックアップを作成してください。
たとえば、次のような構造上の変更を行った場合は、バックアップを作成する必要があります。
-
データファイルの追加、削除または名前変更
-
表領域の追加または削除、表領域の読取り/書込み状態の変更
-
REDOログ・ファイルまたはREDOログ・グループの追加と削除
制御ファイルのバックアップ方法については、「制御ファイルのバックアップ」を参照してください。
親トピック: 制御ファイルのガイドライン
10.2.4 制御ファイルのサイズ管理
制御ファイルのサイズを決定する主な要因は、対応するデータベースを作成したCREATE DATABASE
文のMAXDATAFILES
、MAXLOGFILES
、MAXLOGMEMBERS
、MAXLOGHISTORY
およびMAXINSTANCES
パラメータに設定された値です。
これらのパラメータの値を大きくすると、対応するデータベースの制御ファイルのサイズも大きくなります。
関連項目:
-
制御ファイルの最大サイズの詳細は、使用しているオペレーティング・システム固有のOracleマニュアルを参照してください。
-
CREATE DATABASE
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: 制御ファイルのガイドライン
10.3 制御ファイルの作成
制御ファイルを作成、コピー、名前変更および再配置できます。
- 初期制御ファイルの作成
Oracle Databaseの初期制御ファイルは、CREATE DATABASE
文を発行したときに作成されます。 - 制御ファイルの追加コピーの作成、名前変更および再配置
多重化のために制御ファイルのコピーを追加作成するには、既存の制御ファイルを新しい位置にコピーし、そのファイル名を制御ファイルのリストに追加します。 - 新しい制御ファイルの作成
データベースのすべての制御ファイルが恒久的な損傷を受け、制御ファイルのバックアップがない場合、またはデータベース名を変更する場合は、新規制御ファイルを作成できます。
親トピック: 制御ファイルの管理
10.3.1 初期制御ファイルの作成
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マニュアルを参照してください。
親トピック: 制御ファイルの作成
10.3.2 制御ファイルの追加コピーの作成、名前変更および再配置
多重化のために制御ファイルのコピーを追加作成するには、既存の制御ファイルを新しい位置にコピーし、そのファイル名を制御ファイルのリストに追加します。
同様に、制御ファイルの名前を変更するには、既存の制御ファイルを新しい名前や位置にコピーし、制御ファイル・リストのファイル名を変更します。どちらの場合も、作業中に制御ファイルが変更されないように、制御ファイルをコピーする前にデータベースを停止してください。
現行の制御ファイルの多重化コピーを追加、または制御ファイル名を変更するには:
- データベースを停止します。
- オペレーティング・システムのコマンドを使用して、既存の制御ファイルを新しい位置にコピーします。
- データベース初期化パラメータ・ファイルの
CONTROL_FILES
パラメータを編集して、新しい制御ファイル名を追加するか、または既存の制御ファイル名を変更します。 - データベースを再起動します。
親トピック: 制御ファイルの作成
10.3.3 新しい制御ファイルの作成
データベースのすべての制御ファイルが恒久的な損傷を受け、制御ファイルのバックアップがない場合、またはデータベース名を変更する場合は、新規制御ファイルを作成できます。
- 新しい制御ファイルを作成する場合
特定の状況では新規制御ファイルを作成する必要があります。 - CREATE CONTROLFILE文
CREATE CONTROLFILE
文を使用して、データベースの新しい制御ファイルを作成できます。 - 新しい制御ファイルの作成
データベースの新しい制御ファイルを作成できます。
親トピック: 制御ファイルの作成
10.3.3.1 新しい制御ファイルを作成する場合
特定の状況では新規制御ファイルを作成する必要があります。
次の状況の場合に、新しい制御ファイルを作成する必要があります。
-
データベースの制御ファイルがすべて破損し、制御ファイルのバックアップがない場合。
-
データベース名を変更する場合。
たとえば、分散環境でデータベース名が別のデータベース名と競合する場合は、データベース名を変更します。
注意:
データベース名とDBID(内部データベース識別子)は、DBNEWIDユーティリティを使用して変更できます。このユーティリティの使用の詳細は、『Oracle Databaseユーティリティ』を参照してください。
親トピック: 新しい制御ファイルの作成
10.3.3.2 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言語リファレンス』を参照してください
親トピック: 新しい制御ファイルの作成
10.3.3.3 新しい制御ファイルの作成
データベースの新しい制御ファイルを作成できます。
新しい制御ファイルを作成するには、次のステップを実行します。
これでデータベースはオープンされ、使用可能になります。
親トピック: 新しい制御ファイルの作成
10.4 制御ファイル作成後のトラブルシューティング
CREATE CONTROLFILE
文を実行した後で、エラーが発生する場合があります。
- 欠落したファイルや余分なファイルのチェック
新しい制御ファイルを作成し、それを使用してデータベースをオープンした後、アラート・ログをチェックして、データ・ディクショナリと制御ファイルの間で不整合(データ・ディクショナリにはデータファイルがあるが、制御ファイルには含まれていないなど)が検出されていないかを確認してください。 - CREATE CONTROLFILEでのエラー処理
新しい制御ファイルの作成後にデータベースをマウントおよびオープンしようとしたときにOracle Databaseによってエラーが送信された場合、最も可能性の高い原因は、CREATE CONTROLFILE
文からファイルを省略したか、リストされていない必要のあるファイルが含まれていることです。
親トピック: 制御ファイルの管理
10.4.1 欠落したファイルや余分なファイルのチェック
新しい制御ファイルを作成し、それを使用してデータベースをオープンした後、アラート・ログをチェックして、データ・ディクショナリと制御ファイルの間で不整合(データ・ディクショナリにはデータファイルがあるが、制御ファイルには含まれていないなど)が検出されていないかを確認してください。
データ・ディクショナリ内にはデータファイルが存在していて、新しい制御ファイルには含まれていない場合、データベースは制御ファイル内にMISSING
nnnn
(nnnn
は10進数のファイル番号)という名前のプレースホルダ・エントリを作成します。制御ファイル内のMISSING
nnnn
には、オフラインであること、およびメディア・リカバリを必要とすることを示すフラグが設定されます。
MISSING
nnnn
に対応する実際のデータファイルが読取り専用または通常のオフラインである場合、MISSING
nnnn
の名前を実際のデータファイルの名前に変更することによってデータファイルにアクセス可能になります。MISSING
nnnn
に対応するデータファイルが読取り専用または通常のオフラインではない場合、データファイルはメディア・リカバリを必要としますが、RESETLOGS
の結果これができないため、名前の変更操作によってデータファイルをアクセス可能にできません。この場合、データファイルを含む表領域を削除する必要があります。
反対に、制御ファイルに指定されているデータファイルがデータ・ディクショナリに存在しない場合、データベースは新しい制御ファイルからそのファイルへの参照を削除します。どちらの場合も、検出された状態を通知するメッセージがアラート・ログに書き込まれます。
親トピック: 制御ファイル作成後のトラブルシューティング
10.4.2 CREATE CONTROLFILEでのエラー処理
新しい制御ファイルの作成後にデータベースをマウントおよびオープンしようとしたときにOracle Databaseによってエラーが送信された場合、最も可能性の高い原因は、CREATE CONTROLFILE
文からファイルを省略したか、リストされていない必要のあるファイルが含まれていることです。
通常、エラーはORA-01173
、ORA-01176
、ORA-01177
、ORA-01215
またはORA-01216
です。この場合は、「新しい制御ファイルの作成」で作成したバックアップのファイルをリストアし、正しいファイル名を使用してそのタスクの手順を再実行してください。
親トピック: 制御ファイル作成後のトラブルシューティング
10.5 制御ファイルのバックアップ
制御ファイルをバックアップするには、ALTER DATABASE BACKUP CONTROLFILE
文を使用します。
次の2つのオプションがあります。
-
次の文を使用して、制御ファイルをバイナリ・ファイル(既存の制御ファイルの複製)にバックアップを作成します。
ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
-
後で制御ファイルの再作成に使用できるSQL文を生成します。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
このコマンドによってSQLスクリプトがトレース・ファイルに書き込まれ、これを取得および編集して制御ファイルを再作成できます。トレース・ファイルの名前と場所は、アラート・ログで調べられます。
関連項目:
-
制御ファイルのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください
-
親トピック: 制御ファイルの管理
10.6 現行のコピーを使用した制御ファイルのリカバリ
現行のバックアップまたは多重化コピーから制御ファイルをリカバリできます。
- 制御ファイルのコピーを使用した制御ファイル破損からのリカバリ
制御ファイルが破損した場合は、制御ファイルのコピーを使用してリカバリできます。 - 制御ファイルのコピーを使用した永続的なメディア障害からのリカバリ
恒久的なメディア障害がある場合は、制御ファイルのコピーを使用してリカバリできます。
親トピック: 制御ファイルの管理
10.6.1 制御ファイルのコピーを使用した制御ファイル破損からのリカバリ
制御ファイルが破損した場合は、制御ファイルのコピーを使用してリカバリできます。
この方法では、CONTROL_FILES
パラメータで指定されている制御ファイルの1つが破損し、制御ファイルのディレクトリにはまだアクセス可能で、制御ファイルの多重化コピーがある場合を想定しています。
親トピック: 現行のコピーを使用した制御ファイルのリカバリ
10.6.2 制御ファイルのコピーを使用した永続的なメディア障害からのリカバリ
恒久的なメディア障害がある場合は、制御ファイルのコピーを使用してリカバリできます。
この方法では、永続的なメディア障害のために、CONTROL_FILES
パラメータで指定されている制御ファイルの1つにアクセスできず、制御ファイルの多重化コピーがある場合を想定しています。
多重制御ファイルがある場合は、CONTROL_FILES
初期化パラメータを編集することで、データベースを迅速に起動できます。破損した制御ファイルをCONTROL_FILES
設定から削除すると、即時にデータベースを再起動できます。次に、破損した制御ファイルを再作成し、CONTROL_FILES
初期化パラメータにリカバリした制御ファイルを設定してから、データベースを停止し、再起動します。
親トピック: 現行のコピーを使用した制御ファイルのリカバリ
10.7 制御ファイルの削除
制御ファイルは削除できますが、データベースには常に少なくとも2つの制御ファイルが存在する必要があります。
たとえば、制御ファイルの位置が不適切な場合は、データベースからその制御ファイルを削除できます。
親トピック: 制御ファイルの管理
10.8 制御ファイルのデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットに対して制御ファイルに関する情報を問い合せることができます。
次のビューには、制御ファイルに関する情報が表示されます。
ビュー | 説明 |
---|---|
|
制御ファイル内のデータベース情報が表示されます。 |
|
制御ファイル名が一覧表示されます。 |
|
制御ファイルのレコード・セクションに関する情報が表示されます。 |
|
|
この例では、制御ファイル名が一覧表示されます。
SQL> SELECT NAME FROM V$CONTROLFILE; NAME ------------------------------------- /u01/oracle/prod/control01.ctl /u02/oracle/prod/control02.ctl /u03/oracle/prod/control03.ctl
親トピック: 制御ファイルの管理