30 ユーザー管理のデータベースのフラッシュバックおよびリカバリの実行
ユーザー管理のバックアップおよびリカバリ計画は、RMANを必要としない方法です。ユーザー管理のバックアップおよびリカバリ計画では、Oracle Databaseのフラッシュバック機能を使用します。
30.1 SQL*Plusでのデータベースのフラッシュバックの実行
SQL*Plusを使用して、マルチテナント・コンテナ・データベース(CDB)およびプラガブル・データベース(PDB)でフラッシュバック・データベース操作を実行できます。Oracle Flashback Databaseを使用すると、バックアップからファイルをリストアせずに、データベース全体またはPDB全体を元の状態に戻すことができます。
フラッシュバック・データベースを使用する場合は、データベース用の高速リカバリ領域を作成し、フラッシュバック・ログの収集を有効にする必要があります。フラッシュバック・データベースの要件および準備は、RMANを使用する場合でも、SQL*Plusを使用する場合でも同じです。
関連項目:
-
フラッシュバック・データベース機能の動作、フラッシュバック・データベースの使用要件およびフラッシュバック・データベースに必要なフラッシュバック・ログの収集を有効にする方法の詳細は、「フラッシュバックおよびデータベースのPoint-in-Timeリカバリの実行」を参照
30.1.1 SQL*PlusでのCDBのデータベースのフラッシュバックの実行
SQL*Plus FLASHBACK DATABASE
コマンドを使用して、マルチテナント・コンテナ・データベース(CDB)全体を前の状態に戻します。このコマンドは、RMANのFLASHBACK DATABASE
コマンドと同じ機能を実行します。
前提条件:
フラッシュバック・データベース操作を実行する前提条件は、フラッシュバック・データベースおよびリストア・ポイントの前提条件で説明しています。
関連項目:
フラッシュバック・データベース機能の動作、フラッシュバック・データベースの使用要件およびフラッシュバック・データベースに必要なフラッシュバック・ログの収集を有効にする方法の詳細は、「フラッシュバックおよびデータベースのPoint-in-Timeリカバリの実行」を参照
30.1.2 SQL*PlusでのPDBのデータベースのフラッシュバックの実行
SQL*PlusのFLASHBACK
DATABASE
コマンドを使用して、特定のプラガブル・データベース (PDB)を前の状態に戻します。マルチテナント・コンテナ・データベース(CDB)に残っているPDBは、単一のPDBに対するフラッシュバック操作の影響を受けません。
FLASHBACK DATABASE
コマンドの機能は、RMANのFLASHBACK DATABASE
コマンドと同じです。
SQL*Plusを使用してPDBのフラッシュバックを実行する手順
注意:
プロキシPDBでのフラッシュバック操作はサポートされていません。
関連項目:
フラッシュバック・データベース機能の動作、フラッシュバック・データベースの使用要件およびフラッシュバック・データベースに必要なフラッシュバック・ログの収集を有効にする方法の詳細は、「フラッシュバックおよびデータベースのPoint-in-Timeリカバリの実行」を参照
30.2 ユーザー管理のメディア・リカバリの概要
この項では、SQL*Plusを使用したリカバリの概要について説明します。この項では、次の項目について説明します。
30.2.1 ユーザー管理のリストアおよびリカバリ
通常、メディア障害またはユーザー・エラーによって1つ以上のデータファイルが破損したり削除された場合に、ファイルをリストアします。ユーザー管理のリストア操作では、オペレーティング・システムのユーティリティを使用してファイルのバックアップをリストアします。
メディア障害がデータファイルに影響を与えた場合、リカバリの手順は次の条件によって異なります。
-
データベースのアーカイブ・モード(
ARCHIVELOG
またはNOARCHIVELOG
) -
メディア障害のタイプ
-
メディア障害によって影響されるファイル(データファイル、制御ファイル、アーカイブREDOログおよびサーバー・パラメータ・ファイルはすべてリストア操作の対象となります。)
永続的または一時的なメディア障害によって、NOARCHIVELOG
モードで実行しているデータベースのデータファイルが影響を受けた場合、データベースは自動的に停止します。メディア障害が一時的な場合は、原因となっている問題を解決し、データベースを再起動します。通常、クラッシュ・リカバリによって、コミット済のすべてのトランザクションがオンラインREDOログを使用してリカバリされます。メディア障害が永続的な場合は、「NOARCHIVELOGモードでのデータベースのリカバリ」の説明に従ってデータベースをリカバリします。
表30-1に、ARCHIVELOG
モードで実行されているデータベースでファイルを消失した場合に実行するメディア・リカバリについての説明を示します。
表30-1 ユーザー管理のリストア操作
消失したもの | 対応 |
---|---|
|
データベースは自動的に停止します。ハードウェアの問題が一時的な場合には、問題を解決し、データベースを再起動します。通常、クラッシュ・リカバリによって、消失したトランザクションがリカバリされます。ハードウェアの問題が永続的な場合は、「クローズしているデータベースのリカバリの実行」の説明に従って、バックアップからデータファイルをリストアし、データベースをリカバリします。 |
|
影響を受けたデータファイルがオフライン化されますが、データベースはオープンしたままです。データベースの影響を受けていない部分を使用可能なままにしておく必要がある場合には、データベースを停止しないでください。一時オプションを使用して、問題が発生したデータファイルを含む表領域をオフラインにした後、「オープンしているデータベースのリカバリの実行」の説明に従ってリカバリします。 |
現行の制御ファイルのすべてのコピー |
バックアップ制御ファイルをリストアし、 バックアップがない場合には、制御ファイルを再作成してください。可能であれば、 |
多重制御ファイルの1つのコピー |
影響を受けていない多重制御ファイルの1つを破損または欠落した制御ファイルの場所にコピーして、データベースをオープンします。元の場所に制御ファイルをコピーできない場合は、初期化パラメータ・ファイルを編集して新しい場所を反映するか、または破損した制御ファイルを削除します。その後、データベースをオープンします。 |
メディア・リカバリに必要な1つ以上のアーカイブ・ログ |
リカバリを実行するには、これらのアーカイブ・ログのバックアップをリストアする必要があります。デフォルトの場所またはデフォルト以外の場所にリストアできます。バックアップがない場合には、欠落している最初のREDOログの前のSCNまで不完全リカバリを実行し、 |
サーバー・パラメータ・ファイル(SPFILE) |
サーバー・パラメータ・ファイルのバックアップがある場合には、これをリストアします。また、クライアント側の初期化パラメータ・ファイルのバックアップがある場合には、このファイルのバックアップをリストアし、インスタンスを起動した後、サーバー・パラメータ・ファイルを再作成できます。 |
注意:
Oracle Managed Filesのリストアおよびリカバリは、ユーザーが名前を付けたファイルのリストアおよびリカバリと同じです。
メディア・リカバリの実行には、SQL*PlusのRECOVER
文を使用することをお薦めします。SQL文のALTER
DATABASE
RECOVER
も使用できますが、通常、RECOVER
文を使用した方が簡単です。どのような種類のメディア・リカバリを開始する場合でも、次の制約に従う必要があります。
-
管理者権限が必要です。
-
すべてのリカバリ・セッションが互換である必要があります。
-
別のセッションが不完全メディア・リカバリを実行しているときに、もう1つのセッションで完全メディア・リカバリを開始することはできません。
-
共有サーバー・プロセスを使用してデータベースに接続している場合は、メディア・リカバリを開始できません。
30.2.2 RECOVERコマンドを使用した自動リカバリ
SQL*Plusを使用してメディア・リカバリを実行する場合、最も簡単な方法は、SQL*PlusのRECOVER
コマンドで自動リカバリを実行する方法です。自動リカバリでは、個々のアーカイブREDOログの適用についてSQL*Plusの手動プロンプトなしに、リカバリが開始されます。
SQL*Plusを使用する場合は、リカバリ時に必要となるアーカイブREDOログのデフォルト・ファイル名の適用を自動化するために、次のオプションを使用できます。
-
RECOVER
コマンドを発行する前にSET
AUTORECOVERY
ON
を発行する。デフォルトであるSET
AUTORECOVERY
OFF
を実行した場合は、ファイル名を手動で入力するか、[Enter]キーを押して、提示されたファイル名を受け入れる必要があります。 -
RECOVER
コマンドのオプションとしてAUTOMATIC
キーワードを指定する。
いずれの場合にも、必要なファイルが正しい場所に正しい名前で存在しているかぎりRECOVER
コマンドを発行したときに介入は必要ありません。データベースでREDOログ・ファイルが正常に適用された場合は、次のメッセージが戻されます。
Log applied.
その後、順序内の次のREDOログを求めるプロンプトが表示されます。最後に適用されたログが最後の必要なログである場合は、リカバリが終了します。
自動リカバリに使用されるファイル名は、LOG_ARCHIVE_FORMAT
の値とLOG_ARCHIVE_DEST_
n
の値を連結して導出されます。このn
は、有効なすべてのローカル出力先の中で最大の値です。たとえば、データベース・インスタンスで初期化パラメータの次のような設定が有効になっているとします。
LOG_ARCHIVE_DEST_1 = "LOCATION=/arc_dest/loc1/" LOG_ARCHIVE_DEST_2 = "LOCATION=/arc_dest/loc2/" LOG_ARCHIVE_DEST_STATE_1 = DEFER LOG_ARCHIVE_DEST_STATE_2 = ENABLE LOG_ARCHIVE_FORMAT = arch_%t_%s_%r.arc
この場合、SQL*Plusは自動的に/arc_dest/loc2/arch_%t_%s_%r.arc
というファイル名を提示します(この%t
はスレッド、%s
は順序、%r
はRESETLOGのIDです)。
30.2.2.1 SET AUTORECOVERYを使用した自動リカバリ
データファイル・バックアップをリストアした後、SET
AUTORECOVERY
ON
コマンドを実行すると、自動リカバリが有効になります。たとえば、SQL*Plusに次のコマンドを入力すると、自動リカバリを実行し、データベースをオープンできます。
STARTUP MOUNT SET AUTORECOVERY ON RECOVER DATABASE ALTER DATABASE OPEN;
注意:
SQL*PlusのRECOVER
コマンドを発行した後で、リカバリで考慮されたすべてのファイルをV$RECOVERY_FILE_STATUS
ビューで表示できます。V$RECOVERY_STATUS
ビューで、各ファイルのステータス情報にアクセスできます。これらのビューは、リカバリ・セッションの終了後はアクセスできません。
30.2.2.2 RECOVERコマンドのAUTOMATICオプションを使用した自動リカバリ
SET
AUTORECOVERY
を使用して自動リカバリを有効にする他にも、RECOVER
コマンドでAUTOMATIC
キーワードを指定することもできます。たとえば、SQL*Plusに次のコマンドを入力すると、自動リカバリを実行し、データベースをオープンできます。
STARTUP MOUNT RECOVER AUTOMATIC DATABASE ALTER DATABASE OPEN;
Oracle Real Application Clusters構成を使用しているとき、ユーザーが不完全リカバリを実行するか、またはバックアップ制御ファイルを使用する場合は、最初のREDOスレッドから最初のアーカイブREDOログ・ファイルの名前を算出することのみが可能です。その他のREDOスレッドからは、最初のログ・ファイルを手動で適用する必要があります。特定のスレッド内の最初のログ・ファイルが提供されると、データベースは、このスレッド内の後続のログの名前を提示できます。
30.2.3 アーカイブ・ログがデフォルトの場所にある場合のリカバリ
アーカイブREDOログ・ファイルがデフォルトの場所にある場合、リカバリを実行するために必要な追加設定はありません。
リカバリ中、ログが必要になると、データベースによってファイル名が提示されます。SQL*Plusを使用して、自動ではないメディア・リカバリを実行する場合には、出力は次の形式で表示されます。
ORA-00279: change 53577 generated at 11/26/02 19:20:58 needed for thread 1 ORA-00289: suggestion : /oracle/oradata/trgt/arch/arcr_1_802.arc ORA-00280: change 53577 for thread 1 is in sequence #802 Specify log: [<RET> for suggested | AUTO | FROM logsource | CANCEL ]
ALTER
DATABASE
...
RECOVER
文を使用した場合にも、同様のメッセージが戻されます。ただし、プロンプトは表示されません。
初期化パラメータLOG_ARCHIVE_DEST_
n
(このn
は有効なすべてのローカル出力先の中で最大の値)およびLOG_ARCHIVE_FORMAT
の現在の値を連結し、制御ファイルのログ履歴情報を使用して、提示されるアーカイブ・ログのファイル名が構築されます。次のような設定が可能です。
LOG_ARCHIVE_DEST_1 = 'LOCATION = /oracle/oradata/trgt/arch/' LOG_ARCHIVE_FORMAT = arcr_%t_%s.arc SELECT NAME FROM V$ARCHIVED_LOG; NAME ---------------------------------------- /oracle/oradata/trgt/arch/arcr_1_467.arc /oracle/oradata/trgt/arch/arcr_1_468.arc /oracle/oradata/trgt/arch/arcr_1_469.arc
このため、すべての必要なアーカイブ・ログ・ファイルがLOG_ARCHIVE_DEST_1
という出力先に置かれ、LOG_ARCHIVE_FORMAT
の値が変更されていない場合は、データベースによってログ・ファイルが提示および適用され、メディア・リカバリが自動的に実行されます。
30.2.4 アーカイブ・ログがデフォルト以外の場所にある場合のリカバリ
アーカイブREDOログ・ファイルがデフォルトではない場所に格納されている場合、メディア・リカバリを実行するには、アーカイブREDOログ・ファイルの場所を指定する必要があります。
アーカイブ・ログがデフォルトの場所にない場合、メディア・リカバリを実行するときに、次の相互に排他的なオプションがあります。
-
アーカイブREDOログの場所を指定する
LOG_ARCHIVE_DEST_
n
パラメータを編集し、通常どおりにリカバリします。このタスクについては、「アーカイブ・ログの場所の再設定」を参照してください。
-
リカバリ前にSQL*Plusの
SET
文を使用してデフォルト以外のログの場所を指定するか、RECOVER
コマンドのLOGFILE
パラメータを使用します。このタスクについては、「アーカイブ・ログの場所の変更」を参照してください。
30.2.5 ストレージ・スナップショットの最適化を使用したリカバリ
ストレージ・スナップショットの最適化では、データベースがバックアップ・モードでないときに取得したデータベースのサード・パーティ・スナップショットを使用して、現在の時点またはスナップショットが作成された後の指定した時点のいずれかにデータベースをリカバリできます。ストレージ・スナップショットが作成されたときにデータベースがバックアップ・モードでなかった場合は、スナップショットがOracle要件に準拠している場合のみ、このスナップショットを使用してリカバリを実行できます。「サード・パーティのスナップショット・テクノロジを使用したバックアップの作成」を参照してください。これらの条件を満たす場合、RMANまたはSQL*Plusを使用して、他のバックアップ方法と同じ基本的なリカバリ・ステップに従うことができます。
ストレージ・スナップショットが、ストレージ・スナップショットの最適化を使用するための要件に準拠しない場合は、データファイルをバックアップ・モードにしてスナップショットを作成します。このようなスナップショットを使用してリカバリを実行するには、SQL*Plusを使用したデータベースの完全リカバリの実行またはデータベースの不完全リカバリの実行で説明する手順を使用します。
スナップショット・リカバリの時間の指定
データベースがバックアップ・モードでないときにストレージ・スナップショットが作成された場合は、データベースのリカバリにこのスナップショットを使用する際にSNAPSHOT TIME
オプションを指定する必要があります。SNAPSHOT TIME
オプションは、RMANおよびSQL*PlusのRECOVER
コマンドの両方で使用できます。SNAPSHOT TIME
オプションを使用して指定する時間は、スナップショットの完了直後の時間である必要があります。間違った時間を指定した場合、データベースが修復不能な状態で破損する可能性があります。
スナップショットが実行されるストレージ・アレイとOracle Databaseをホストしているマシンのタイム・クロックが完全に同期していない可能性があるため、SNAPSHOT TIME
オプションで指定する時間に数秒追加することをお薦めします。これにより、スナップショットが取得された時点より前の時点にリカバリされることでファイルが一貫性のない状態になる可能性を避けるのに役立ちます。
SNAPSHOT TIME
句を含むRECOVER
コマンドで指定するすべての時間は、Oracle Databaseホストのタイム・ゾーンに存在することを想定しています。ただし、ストレージ・アレイのタイム・クロックはOracle Databaseホストとは異なるタイムゾーンに存在することはできます。ストレージ・アレイが異なるタイムゾーンでのスナップショット時間をレポートしている場合、SNAPSHOT TIME
オプションで時間を指定する際に、違いを考慮する必要があります。
注意:
UNTIL
オプションで指定したリカバリ・ポイントは、SNAPSHOT TIME
より早い時間を指定できません。
例: ストレージ・スナップショットを使用したリカバリ
この項の例では、RECOVER DATABASE
コマンドを使用して、スナップショットを使用したリカバリを実行します。RECOVER DATABASE
コマンドは、RMANまたはSQL*Plusから使用できます。ただし、UNTIL CANCEL
句はSQL*Plusでのみ有効です。
データベースを完全にリカバリするには、次の手順を実行します。
RECOVER DATABASE;
特定のスナップショットを使用してデータベースをリカバリするには、次の手順を実行します。
この例では、8月15日午後2時に作成されたスナップショットを使用して、データベースをリカバリしています。UNTIL TIME
句には、スナップショット後の任意の時間を指定できます。
RECOVER DATABASE UNTIL TIME '10/15/2012 15:00:00' SNAPSHOT TIME '10/15/2012 14:00:00';
アーカイブREDOログ・ファイルを使用して部分的なリカバリを実行するには、次の手順を実行します。
この例では、8月15日午後2時に作成したスナップショットからのログ・ファイルを使用します。
RECOVER DATABASE UNTIL CANCEL SNAPSHOT TIME '10/15/2012 14:00:00';
30.2.6 ユーザー管理のリカバリ中のリカバリの取消し
メディア・リカバリを開始した後で中断する必要がある場合は、REDOログ・ファイルのプロンプトに対してCANCEL
と入力します。また、個々のデータファイルのリカバリの実行時または自動リカバリの実行時に終了する必要がある場合は、オペレーティング・システムの割込みシグナルを使用します。 リカバリが取り消された後、RECOVER
コマンドを使用してリカバリを再開できます。リカバリは、取り消された位置から再開されます。
30.2.7 パラレル・メディア・リカバリ
Oracle Databaseは、メディア・リカバリのロールフォワード・フェーズのパフォーマンスを向上するために、デフォルトでパラレル・メディア・リカバリを使用します。メディアのパラレル・リカバリでは、ロールフォワード時に各データ・ブロックに別のプロセスを割り当てる分業体制を使用することで、処理の効率を高めています。使用されるプロセスの数は、CPU_COUNT
初期化パラメータで指定されます。これは、デフォルトではシステム上のCPUの数と同じです。たとえば、CPU_COUNT
が4
のシステム上でパラレル・リカバリを実行した場合、リカバリ対象のデータファイルが1つのみである場合には、4つの起動されたプロセスがアーカイブ・ログからブロックを読み取り、REDOを適用します。
一般的に、メディア・リカバリはデータ・ブロックの読取りおよび書込みによって制限されます。パラレル・リカバリでは、パフォーマンスを向上させるために、システムで利用可能なI/O帯域幅がすべて使用されます。システムのI/Oボトルネックが存在するか、非同期I/Oが十分にサポートされていない場合を除いて、パラレル・リカバリによってリカバリのパフォーマンスが向上する可能性があります。
パラレル・リカバリが実行されるデフォルトの動作を変更するには、NOPARALLEL
オプションを指定してSQL*PlusのRECOVER
コマンドを使用するか、またはRECOVER
PARALLEL
0
を使用します。RECOVERY_PARALLELISM
初期化パラメータでは、インスタンス・リカバリまたはクラッシュ・リカバリのみが制御されます。メディア・リカバリは、RECOVERY_PARALLELISM
で使用される値の影響を受けません。
関連項目:
SQL*PlusのRECOVER
...
PARALLEL
およびNOPARALLEL
コマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
30.3 SQL*Plusを使用したデータベースの完全リカバリの実行
通常、メディア障害によって1つ以上のデータファイルにアクセスできなくなった場合に、データベースの完全リカバリを実行します。データベースの完全リカバリを実行中に、使用可能なすべてのREDOを使用し、データベースを現行のSCNまでリカバリします。
V$RECOVER_FILE
ビューに、リカバリが必要なファイルが示されます。状況に応じて、データベース全体でリカバリを実行することも、個々の表領域またはデータファイルでリカバリを実行することもできます。完全リカバリの場合は、RESETLOGS
オプションを指定してデータベースをオープンする必要はないため、最初に一部のデータファイルのリカバリを行ってから、後で残りのデータファイルのリカバリを行うこともできます。
この項のトピックでは、完全メディア・リカバリ操作に必要なステップについて説明します。
30.3.1 クローズしているデータベースのリカバリの実行
データベースがオープン状態でないときに完全リカバリを実行すると、1回の操作ですべての破損したデータファイルをリカバリしたり、個別の操作で破損した各データファイルの個別のリカバリを実行できます。
この手順の前提条件は次のとおりです:
-
現行の制御ファイルが使用可能です。
-
必要なすべてのデータファイルのバックアップがあります。
-
必要なすべてのアーカイブREDOログが使用可能です。
破損または欠落しているデータファイルをリストアおよびリカバリする手順
30.3.2 オープンしているデータベースのリカバリの実行
データベースがオープン状態のときにデータベースのSYSTEM
以外のデータファイルの完全リカバリを実行できます。
この手順の前提条件は次のとおりです:
-
現行の制御ファイルが使用可能です。
-
必要なすべてのデータファイルのバックアップがあります。
-
必要なすべてのアーカイブREDOログが使用可能です。
データベースをオープンしているときにメディア障害が発生した場合は、破損していないデータファイルはオンラインのまま使用できる場合があります。データベース・ライターがファイルに書き込めない場合は、破損したファイルは自動的にオフラインにされますが、破損したファイルを含む表領域はオフラインにされません。データベース・ライターがデータファイルをオープンできない場合は、引き続きエラーが戻されます。破損したファイルを読み取れない問合せはエラーを戻しますが、問合せが失敗したためにデータファイルがオフラインにされることはありません。たとえば、SQL問合せを実行すると、次のような出力が表示される場合があります。
ERROR at line 1: ORA-01116: error in opening database file 3 ORA-01110: data file 11: '/oracle/oradata/trgt/cwmlite02.dbf' ORA-27041: unable to open file SVR4 Error: 2: No such file or directory Additional information: 3
注意:
データベースのオープン中は、この項の手順を使用してSYSTEM
表領域の完全メディア・リカバリを実行することはできません。メディア障害によってSYSTEM
表領域のデータファイルが破損した場合は、データベースは自動的に停止します。
オープン状態のデータベースでデータファイルをリストアする手順
関連項目:
-
データファイルを作成する方法については、『Oracle Database管理者ガイド』を参照してください。
ALTER
DATABASE
RENAME
FILE
については、『Oracle Database SQL言語リファレンス』を参照してください。 -
制御ファイルのリストアまたは再作成の詳細は、「現行の制御ファイルがすべて消失した場合のリカバリ」および「制御ファイルの再作成」を参照してください
-
データ・ファイル・バックアップが欠落している場合のリカバリ実行の詳細は、「バックアップが利用できない場合のデータファイルの再作成」を参照してください
-
完全にデータベースをリカバリするために必要なREDOが欠落している場合のデータベースのPoint-in-Timeリカバリ実行の詳細は、「データベースの不完全リカバリの実行」を参照してください
30.3.3 CDBのクラッシュおよびインスタンス・リカバリの実行
Oracle Databaseは、マルチテナント・コンテナ・データベース(CDB).全体に対して、クラッシュおよびインスタンス・リカバリを実行します個々のプラガブル・データベース(PDB)をリカバリすることはできません。
この手順の前提条件は次のとおりです:
-
現行の制御ファイルが使用可能です。
-
必要なすべてのデータファイルのバックアップがあります。
-
必要なすべてのアーカイブREDOログが使用可能です。
CDBのクラッシュおよびインスタンス・リカバリを実行するには、次の手順を実行します。
関連項目:
-
制御ファイルのリストアまたは再作成の詳細は、「現行の制御ファイルがすべて消失した場合のリカバリ」および「制御ファイルの再作成」を参照してください
-
データ・ファイル・バックアップが欠落している場合のリカバリ実行の詳細は、「バックアップが利用できない場合のデータファイルの再作成」を参照してください
-
完全にデータベースをリカバリするために必要なREDOが欠落している場合のデータベースのPoint-in-Timeリカバリ実行の詳細は、「データベースの不完全リカバリの実行」を参照してください
30.4 データベースの不完全リカバリの実行
不完全リカバリは、データベースのPoint-in-Timeリカバリとも呼ばれます。
通常、次のような場合にデータベースのPoint-in-Timeリカバリ(DBPITR)を実行します。
-
ユーザー・エラーまたは管理エラーの前のSCNまでデータベースをリカバリする場合。
-
データベースに破損ブロックが含まれている場合。
-
必要なすべてのアーカイブREDOログが使用可能ではなかったためデータベースの完全リカバリに失敗した場合。
-
本番データベース・バックアップからテスト・データベースまたはレポート・データベースを作成する場合。
データベースをARCHIVELOG
モードで実行しているときに、アーカイブREDOログ・ファイルの唯一のコピーが破損した場合には、破損したファイルが、データベースの現在の動作に影響を与えることはありません。表30-2に、REDOログが書き込まれた場合およびデータファイルをバックアップした場合に応じて発生する可能性がある状況を示します。
表30-2 アーカイブREDOログの消失
バックアップ対象 | 対応 |
---|---|
一杯になったオンラインREDOログ・グループ(現在アーカイブされている)が書き込まれた後のすべてのデータファイル |
完全メディア・リカバリに、一杯になったオンラインREDOログ・グループのアーカイブされたバージョンは必要ありません。 |
一杯になったオンラインREDOログ・グループが書き込まれる前の特定のデータファイル |
対応するデータファイルが永続的なメディア障害によって破損した場合は、破損したデータファイルの最新のバックアップを使用して、破損したアーカイブREDOログ・ファイルに至るまで、破損したデータファイルの表領域のPoint-in-Timeリカバリを実行します。 |
注意:
アーカイブREDOログ・グループが破損したことがわかっている場合は、破損したアーカイブREDOログを必要としない、データベース全体のバックアップを作成するために、すぐにすべてのデータファイルをバックアップします。
DBPITRでの方法は、特定の時刻またはSCNを指定するか、あるいはCANCEL
と入力することによって終了する点以外は、クローズしているデータベースのリカバリの実行方法と非常に類似しています。取消しベースのリカバリでは、アーカイブREDOログ・ファイルの推奨ファイル名がプロンプトに表示されます。ユーザーがファイル名のかわりにCANCEL
を指定するか、すべてのREDOがデータファイルに適用されると、リカバリは停止します。リカバリを終了するアーカイブ・ログを制御する場合は、取消しベースのリカバリが最適な方法です。
30.4.1 取消しベースの不完全リカバリの実行
取消しベースのリカバリでは、ユーザーに対してアーカイブREDOログ・ファイルのファイル名を提示するプロンプトを表示して、リカバリが進行していきます。ユーザーがファイル名のかわりにCANCEL
を指定するか、すべてのREDOがデータファイルに適用されると、リカバリは停止します。
この手順の前提条件は次のとおりです:
-
現行の制御ファイルが使用可能です。
-
必要なすべてのデータファイルのバックアップがあります。
取消しベースのリカバリを実行する手順
関連項目:
-
ALTER
DATABASE
OPEN
RESETLOGS
が正常に実行されない原因については、「ユーザー管理のメディア・リカバリの問題」を参照してください。 -
制御ファイルのリストアまたは再作成の詳細は、「現行の制御ファイルがすべて消失した場合のリカバリ」を参照してください
-
データ・ファイル・バックアップが欠落している場合のリカバリ実行の詳細は、「バックアップが利用できない場合のデータファイルの再作成」を参照してください
30.4.2 時間ベースまたは変更ベースの不完全リカバリの実行
不完全リカバリの終了位置のSCNまたは時間を指定できます。
データベースが季節的な時間変更(たとえば夏時間)の影響を受ける場合には、REDOログの中に1つの時間が2度出現し、2番目の、つまり後の時間までリカバリを行う場合に、問題が発生します。時間の変更を処理するには、取消しベースまたは変更ベースのリカバリを実行します。
この手順の前提条件は次のとおりです:
-
現行の制御ファイルが使用可能です。
-
必要なすべてのデータファイルのバックアップがあります。
変更ベースまたは時間ベースのリカバリを実行する手順
関連項目:
-
制御ファイルのリストアまたは再作成の詳細は、「現行の制御ファイルがすべて消失した場合のリカバリ」を参照してください
-
データ・ファイル・バックアップが欠落している場合のリカバリ実行の詳細は、「バックアップが利用できない場合のデータファイルの再作成」を参照してください
30.5 NOARCHIVELOGモードでのデータベースのリカバリ
メディア障害によって、NOARCHIVELOG
モードのデータベースのデータファイルが破損した場合は、通常、一貫性のあるデータベース全体のバックアップをリストアすることによってのみリカバリできます。Oracle Data Pump Exportで作成した論理バックアップを使用して通常の物理バックアップを補完している場合は、データベースのエクスポートされたバックアップを、再作成したデータベースまたは古いバックアップからリストアしたデータベースにインポートして、データベースのリストアを試行することもできます。
最新のデータベース全体のバックアップをリストアおよびリカバリする手順
関連項目:
データファイルの名前の変更および場所の変更の詳細は、『Oracle Database管理者ガイド』を参照し、ALTER
DATABASE
RENAME
FILE
については、『Oracle Database SQL言語リファレンス』を参照してください。
30.6 メディア・リカバリのトラブルシューティング
この項では、ユーザー管理のメディア・リカバリ(Recovery Manager (RMAN)を使用しないで実行するメディア・リカバリ)のトラブルシューティングの方法について説明します。この項の内容は、次のとおりです。
30.6.1 ユーザー管理のメディア・リカバリの問題
表30-4に、メディア・リカバリ中に発生する可能性がある問題を示します。
表30-4 メディア・リカバリの問題
問題 | 説明 |
---|---|
アーカイブ・ログの欠落または名前の誤り |
制御ファイルに記録されたアーカイブ・ログが見つからないため、リカバリは停止します。 |
データベースをオープンしようとすると、 |
このエラーの一般的な原因は次のとおりです。
|
2つの状況が考えられます。
|
|
格納中またはストレージ・システム間でコピーされるときに、ログが破損した可能性があります。 |
|
パラレルREDO機能を有効にした場合、REDOログが新規のフォーマットで生成されます。以前のリリースのOracleでは、パラレルREDOログを適用できません。ただし、Oracle9i Databaseリリース2(9.2)より前のリリースでは、パラレルREDOフォーマットを検出し、エラー・メッセージ「 |
|
データファイルのバックアップに破損したデータ・ブロックが含まれているか、リカバリ中またはバックアップにコピーされたときにデータ・ブロックが破損しました。 |
|
その他の問題 |
リカバリ中には、メモリーの破損や、その他の一時的な問題が発生することがあります。 |
メディア・リカバリの問題は通常、リカバリ中に通知される外部エラーまたは内部エラーとして出現します。たとえば、外部エラーは、REDOブロックまたはデータ・ブロックでチェックサム検証チェックが失敗したことを示します。内部エラーは、データベースの不具合か、基礎となるオペレーティング・システムおよびハードウェアに起因するエラーによって発生する可能性があります。
メディア・リカバリで、データベース・バックアップのリカバリ中に問題が発生した場合は、スタック・リカバリの問題またはREDO適用中の問題であるかどうかに関係なく、データベースは常に停止し、リカバリ中のデータファイルを一貫性のある状態、つまり、障害前の一貫性のあるSCNのままにします。次のいずれかを実行できます。
-
データベースを読取り専用でオープンし、問題を調査します。
-
RESETLOGS
オプションを指定してデータベースをオープンします(RESETLOGS
のオープンの要件が満たされている場合)。スタンバイ・データベースはメディア・リカバリの形態で更新されるため、RESETLOGS
の制限は、フィジカル・スタンバイ・データベースをオープンする場合にも適用されます。
一般に、データベースを読取り専用でオープンしたり、RESETLOGS
オプションを指定してオープンする場合には、すべてのオンライン・データファイルを同じSCNまでリカバリする必要があります。この要件が満たされない場合は、ユーザーがオープンを試行すると、ORA-1113
またはその他のエラーが通知されることがあります。ORA-1113
の一般的な原因については、表30-4を参照してください。
一般に、メディア・リカバリの問題には、次のように対処します。
-
問題の原因を確認します。必要に応じて試行リカバリを実行します。
-
問題がREDOログの欠落に関係するか、REDOログ、メモリーまたはデータ・ブロックが破損している可能性がある場合は、表30-5に示す方法で問題の解決を試みます。
-
表30-5に示す方法を使用しても問題を解決できない場合は、次のいずれかを実行します。
-
データベース全体のバックアップのリカバリを行う場合は、
RESETLOGS
オプションを指定してデータベースをオープンします。シリアル・メディア・リカバリを実行した場合は、データベースには、破損が発生したSCNの前までのすべての変更が含まれています。このSCN以降の変更は、データベースのリカバリされた部分に含まれていません。オンライン・バックアップをリストアした場合は、RESETLOGS
によるオープンは、REDOストリーム中のすべてのALTER
...
END
BACKUP
操作までリカバリが完了している場合にのみ成功します。 -
データ・ブロックを破損させることをメディア・リカバリに許可して、リカバリを続行します。メディア・リカバリが完了した後、RMANを使用してブロック・メディア・リカバリを実行してください。
-
それでも問題が解決しない場合は、Oracleサポート・サービスに連絡します。
関連項目:
ブロック・メディア・リカバリについては、「障害リカバリの実行」を参照してください。
-
30.6.2 メディア・リカバリの問題の調査: フェーズ1
メディア・リカバリで問題が発生した場合は、リカバリが停止した後、できるだけ多くの情報を入手してください。解決する問題を誤って時間を消費し、さらに問題を悪化させることを防ぐためです。
最初に、問題の原因が、設定の誤り、REDOログの破損、データ・ブロックの破損、メモリーの破損、またはその他の原因のどれかを確認します。データ・ブロックのチェックサムにエラーがある場合には、データ・ブロックが破損しています。REDOログ・ブロックのチェックサムにエラーがある場合には、REDOログが破損しています。
リカバリの問題の原因は、特定するのが困難な場合があります。問題の原因が完全にはわからない場合でも、この項に示す方法を使用すると、データベースのリカバリを迅速に実行できます。
メディア・リカバリの問題を調査する手順
alert.log
を調べて、エラー・メッセージに問題の性質についての一般的な情報が記載されているかを確認します。たとえば、alert_
SID
.log
にチェックサムのエラーが示されているかどうかを確認します。また、メディア・リカバリを続行するためにデータ・ブロックの破損を許可する必要があることが示されているかどうかを確認します。- リカバリ中にOracle Databaseによって生成されたトレース・ファイルを調べます。追加のエラー情報が含まれていることがあります。
30.6.3 ブロックを破損させない修正の試行: フェーズ2
メディア・リカバリの問題のタイプに応じて、いくつかの解決方法があります。表30-5に示す方法の1つ、あるいはその組合せを使用できます。これらの解決方法は、一般的な修復方法です。比較的安全に、ほとんどのメディア・リカバリの問題を解決できます。
表30-5 メディア・リカバリの解決方法
発生した可能性がある問題 | 対応 |
---|---|
アーカイブREDOログの欠落または名前の誤り |
ファイル名が正しく入力されているかを確認します。正しく入力されていた場合には、オペレーティング・システムからログが欠落しているかを確認します。欠落している場合に、バックアップがあれば、バックアップをリストアし、ログを適用します。バックアップがない場合には、可能であれば、欠落したログの時点まで不完全リカバリを実行します。 |
|
表30-4で、このエラーの原因を検討します。リカバリが必要なすべての読取り/書込みデータファイルがオンラインにされていることを確認します。 リカバリにバックアップ制御ファイルを使用した場合には、制御ファイルとデータファイルのSCNに一貫性がないかぎり、データベースをオープンできません。必要なREDOがない場合には、制御ファイルを再作成する必要があります。 |
アーカイブ・ログの破損 |
ログREDOブロックのチェックサム検証が失敗したときには、ログが破損しています。リカバリ・セッション中、またはデータベースがREDOを生成したときに
|
互換性のないパラレルREDOフォーマットによるアーカイブ・ログ |
Oracle9i Databaseリリース2より前のOracle Databaseリリースを実行している場合、パラレルREDOフォーマットで作成されたREDOログを適用するには、次のステップを実行する必要があります。
|
メモリーの破損または一時的な問題 |
データベースを停止してリカバリを再開すると、問題を解決できる場合があります。2回目の試行も失敗した場合は、データベースを一貫性のある状態のままにしておく必要があります。 |
データ・ブロックの破損 |
ユーザー管理の方法を使用して、データファイルのリストアおよびリカバリを再度実行するか、またはRMANの データ・ブロックのチェックサム検証が失敗した場合は、データ・ブロックが破損しています。 |
表30-5に示す方法で問題を解決できない場合は、データを消失せずに、簡単に問題を解決できる方法がない可能性があります。次のようなオプションがあります。
-
RESETLOGS
オプションを指定してデータベースをオープンします(データベース全体のリカバリのため)。この解決方法では、REDOの問題が発生した時点以降のすべての変更が廃棄されますが、データベースの論理的一貫性は保証されます。
-
メディア・リカバリで1つ以上のデータ・ブロックを破損させることを許可して、続行します。
このオプションは、アラート・ログに、データ・ブロックを破損させることを許可すればリカバリを続行できることが示されている場合にのみ成功します。これはほとんどのリカバリの問題に当てはまります。データベースを迅速に起動し、すべての変更をリカバリする必要がある場合は、このオプションが最適です。 このオプションを検討する場合は、「リカバリでブロックの破損とマークできるようにするかどうかの決定: フェーズ3」に進みます。
関連項目:
RECOVER ... BLOCK
コマンドを使用してブロック・メディア・リカバリを実行する方法については、「ブロック・メディア・リカバリの実行」を参照してください。
30.6.4 リカバリでブロックの破損とマークできるようにするかどうかの決定: フェーズ3
メディア・リカバリで問題が発生した場合、問題の原因となっているデータ・ブロックを破損とマークできるようにすればリカバリを続行できることが、アラート・ログに示されていることがあります。アラート・ログには、ブロックに関する情報(ブロック・タイプ、ブロック・アドレス、所属する表領域など)が含まれています。ユーザー・データを含むブロックの場合は、データ・オブジェクト番号もアラート・ログで報告されることがあります。
この場合、問題のブロックに破損というマークを付けることが許可されれば、リカバリを続行できます。ただし、この方法は常に成功するとはかぎりません。たとえば、SYSTEM
表領域の中の重要なブロックに破損というマークを付けると、最終的にはリカバリ済のデータベースをオープンできなくなる可能性があります。もう1つ考慮すべき点は、リカバリの問題を分離できるかどうかです。この問題の直後に、REDOストリームでその他の多数の問題が発生する場合は、RESETLOGS
オプションを指定してデータベースをオープンする方がよい場合があります。
ユーザー・データを含むブロックの場合は、通常、データベースを問い合せて、そのブロックを所有するオブジェクトまたは表を確認できます。データベースがオープンしていない場合には、データベース全体のバックアップのリカバリ中であっても、データベースを読取り専用でオープンできます。次の例はリカバリを取り消して、データベースを読取り専用でオープンします。
CANCEL ALTER DATABASE OPEN READ ONLY;
alert_
SID
.log
で報告されているデータ・オブジェクト番号が8031
であるとします。次の問合せを発行して、所有者、オブジェクト名およびオブジェクト型を確認できます。
SELECT OWNER, OBJECT_NAME, SUBOBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE DATA_OBJECT_ID = 8031;
リカバリの問題が分離されているかどうかを確認するために、診断用の試行リカバリを実行できます。試行リカバリでは、REDOストリームをスキャンして問題が検索されますが、リカバリされたデータベースに対して実際の変更は行いません。試行リカバリでリカバリの問題が検出された場合、alert_
SID
.log
で報告されます。試行リカバリを起動するには、「RECOVER ... TEST文の実行」で説明するように、RECOVER
...
TEST
文を使用します。
これらの調査を実行した後、表30-6のガイドラインに従って、リカバリでブロックの破損を許可するかどうかを決定します。
表30-6 リカバリでブロックの破損を許可するためのガイドライン
問題の状態 | ブロック | 対応 |
---|---|---|
分離されていない |
|
|
分離されている |
|
最終的にデータベースをオープンできなくなる可能性があるため、ブロックは破損させないでください。ただし、 |
分離されている |
索引データ |
データベースのリカバリ後に索引を再作成できるため、索引ブロックを破損させることを検討してください。 |
分離されている |
ユーザー・データ |
データの重要性に基づいて決定します。データファイルのリカバリを続行し、ブロックを破損させると、ブロック内のデータが消失します。ただし、データファイルのリカバリが完了した後で、RMANを使用してブロック・メディア・リカバリを実行できます。 |
分離されている |
ロールバックまたはUNDOデータ |
すべてのトランザクションがコミットされる場合は、ロールバックまたはUNDOブロックを破損させることを検討します。UNDOを生成したトランザクションをロールバックしない場合は、データベースに害はありません。ただし、これらのトランザクションをロールバックする場合は、UNDOブロックを破損させると問題が発生する可能性があります。判断できない場合は、Oracleサポート・サービスに連絡してください。 |
関連項目:
試行リカバリの実行方法については、「試行リカバリの実行」を参照してください。リカバリでブロックの破損を許可するように決定した場合は、「リカバリでのブロックの破損の許可: フェーズ4」を参照してください。
30.6.6 試行リカバリの実行
スタック・リカバリなどの問題が発生した場合、判断が困難な場合があります。ブロックが比較的重要でなく、問題が分離されている場合は、通常、ブロックを破損させます。ただし、問題が分離されていない場合は、RESETLOGS
オプションを指定してデータベースをオープンする方がよい場合があります。
このため、Oracle Databaseでは、試行リカバリがサポートされています。試行リカバリは、通常のメディア・リカバリと同じ方法でREDOを適用しますが、ディスクに変更を書き込むことはなく、必ず変更をロールバックします。試行リカバリはメモリー内でのみ発生します。
30.6.6.1 試行リカバリの仕組み
デフォルトでは、試行リカバリでスタック・リカバリやその他の問題が検出されると、常に、メモリー内でデータ・ブロックに破損しているというマークが付けられます(このアクションによってリカバリを続行できる場合)。試行リカバリ中に生成されたエラーは、アラート・ファイルに書き込まれます。これらのエラーは、テスト実行のエラーであることが明示されます。
試行リカバリでは、通常のメディア・リカバリと同様に、アーカイブ・ログのファイル名を指定するプロンプトが表示され、ユーザーは、ログを適用するかどうかを判断するように求められます。試行リカバリは次の場合に終了します。
-
試行リカバリ用に使用できるメモリー内の最大バッファ数がすべて使用された場合
-
リカバリ不能なエラー(データ・ブロックを破損させても解決できないエラー)が通知された場合
-
ユーザーがリカバリ・セッションを取り消したか中断した場合
-
REDOストリーム内の次のREDOレコードによって制御ファイルが変更された場合
-
必要なREDOがすべて適用された場合
試行リカバリが終了すると、アラート・ファイル内のエラー・メッセージを除き、テスト実行のすべての影響がシステムから削除されます。試行リカバリ中にインスタンスの障害が発生した場合は、試行リカバリが変更をディスクに書き込むことはないため、試行リカバリのすべての影響がシステムから削除されます。
試行リカバリを使用することによって、通常のリカバリを続行した場合に発生する可能性のある問題を予測できます。進行中のメモリーの破損を原因とする問題の場合は、試行リカバリと通常のリカバリで発生するエラーが異なることがあります。
30.6.6.2 RECOVER... TEST文の実行
TEST
オプションはすべてのRECOVER
コマンドで使用できます。たとえば、SQL*Plusを起動して次のコマンドのいずれかを発行できます。
RECOVER DATABASE TEST RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL TEST RECOVER TABLESPACE users TEST RECOVER DATABASE UNTIL CANCEL TEST
デフォルトでは、試行リカバリを実行すると、メモリー内でブロックの破損が常に試行されます(このアクションによって試行リカバリを続行できる場合)。試行リカバリはデフォルトで、いくつでもデータ・ブロックを破損させることができます。RECOVER
...
TEST
文でALLOW
n
CORRUPTION
句を指定すると、試行リカバリの実行時にメモリー内で破損させることができるデータ・ブロックの数を制限できます。
試行リカバリのコマンドは、通常リカバリのコマンドを使用できるすべての場合に使用できます。ただし、試行リカバリを実行する必要があるのは、リカバリで問題が発生する場合のみです。
関連項目: