Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド 11g リリース1(11.1) E05700-03 |
|
この章では、データファイル内の個々のデータ・ブロックをリストアおよびリカバリする方法について説明します。この章の内容は、次のとおりです。
この項では、ブロック・メディア・リカバリの目的および基本的な概念について説明します。
ブロック・メディア・リカバリを使用すると、データファイル内の1つ以上の破損したデータ・ブロックをリカバリできます。ブロック・メディア・リカバリには、データファイルのメディア・リカバリにはない次のようなメリットがあります。
ブロック・メディア・リカバリを使用しないと、1つのブロックが破損した場合でも、データファイルをオフラインにしてデータファイルのバックアップをリストアする必要があります。バックアップの作成後にデータファイルに対して生成されたすべてのREDOを適用する必要があります。メディア・リカバリが完了するまで、ファイル全体が使用不可となります。ブロック・メディア・リカバリを使用すると、実際にリカバリされているブロックのみがリカバリ中に使用不可となります。
ブロック・メディア・リカバリは、ブロックが少数でその数がわかっている場合に発生する物理的な破損の問題に特に有効です。ブロックレベルのデータ消失は、通常、広範囲なデータ消失は引き起こさない断続的でランダムなI/Oエラーや、破損したメモリーがディスクに書き込まれることが原因で発生します。ブロック・メディア・リカバリは、データの消失または破損の程度が不明で、データファイル全体のリカバリが必要な場合には適していません。このような場合は、データファイルのメディア・リカバリが最適です。
ほとんどの場合、データベースは、破損が最初に発生したときに、ブロックをメディア破損とマークし、ディスクに書き込みます。それ以降のブロックの読取りは、ブロックがリカバリされるまで正常に実行できません。ブロック・リカバリは、破損とマークされたブロックまたは破損チェックが失敗したブロックに対してのみ実行できます。
ブロック・メディア・リカバリは、RECOVER ...BLOCK
コマンドを使用して実行します。デフォルトでは、Recovery Managerは、ブロックの完全な状態に近いコピーのフラッシュバック・ログを検索し、次に全体またはレベル0の増分バックアップ内のブロックを検索します。Recovery Managerは、完全な状態に近いコピーを検出すると、それらをリストアし、ブロックに対してメディア・リカバリを実行します。ブロック・メディア・リカバリでは、レベル1の増分バックアップではなく、メディア・リカバリのREDOログのみを使用できます。
V$DATABASE_BLOCK_CORRUPTION
ビューに、Recovery Manager、ANALYZE
、dbv
、SQL問合せなどのデータベース・コンポーネントによって破損とマークされたブロックが表示されます。次のタイプの破損が、このビューに行として追加されます。
ブロックがデータベースで認識されません。チェックサムが無効か、ブロックの内容がすべて0(ゼロ)か、またはブロック・ヘッダーが分裂しています。
物理的な破損のチェックは、デフォルトで有効になっています。BACKUP
コマンドのNOCHECKSUM
オプションを指定することによってチェックサムのチェックを無効にすることはできますが、ブロック・ヘッダーやフッターのチェックなどの他の物理的な一貫性チェックを無効にすることはできません。
ブロックのチェックサムが有効で、ヘッダーとフッターが一致している点などは正常ですが、内容が論理的に一貫性のない状態になっています。ブロック・メディア・リカバリでは、論理的なブロック破損は修復できません。
論理的な破損のチェックは、デフォルトでは無効になっています。BACKUP
、RESTORE
、RECOVER
およびVALIDATE
コマンドのCHECK
LOGICAL
オプションを指定することによって、有効にすることができます。
データベースは、ブロックとセグメント間の関係を検証することによって一部の破損を検出することはできますが、個々のブロックのチェックによって検出することはできません。V$DATABASE_BLOCK_CORRUPTION
ビューに、このタイプの破損は記録されません。
データファイルのメディア・リカバリと同様に、ブロック・メディア・リカバリでも通常は、アーカイブ・ログが欠落しているか、またはアクセスできない場合はリカバリを実行できませんただし、アーカイブREDOログ・ファイルの使用可能なコピーが検出された場合は、リストア・フェイルオーバーが試行されます(「リストア・フェイルオーバー」を参照)。また、ブロック・メディア・リカバリでは、チェックサム障害となる物理的なREDOの破損がある場合はリカバリを実行できません。ただし、ブロック・メディア・リカバリでは、REDOストリームが連続していない場合に、欠落または破損しているREDOレコードがリカバリするブロックに影響しなければ、リカバリを実行できます。データファイルのリカバリには、リカバリの開始から終了まで連続した一連のREDO変更が必要ですが、ブロック・メディア・リカバリでは、リカバリするブロックに対してのみ、連続した一連のREDO変更が必要です。
Recovery Managerは、ブロック・メディア・リカバリ中に欠落または破損しているREDOレコードを初めて検出した際、すぐにはエラーを通知しません。これは、リカバリ中のブロックがこの後のREDOストリームで更新ブロックになる場合があるためです。ブロックが更新されると、それ以前のREDOはブロックの古いインカネーションに適用されていたことになるため、それまでのすべてのREDOは無関係になります。たとえば、ユーザーが表を削除するか、または切り捨ててから、ブロックを他のデータに対して使用した場合、データベースはブロックを更新できます。
次の図に示すように、メディア・リカバリがブロック13で実行されるとします。
ブロック・リカバリの開始後、Recovery Managerは、変更120がREDOストリームから欠落していることを検出します。ログ・ブロックが破損しているか、またはログを検出できないためです。ブロック13はこの後のREDOストリームで更新される可能性があるため、Recovery Managerはリカバリを続行します。変更140で、ユーザーが、ブロック13に格納されているemployees
表を削除し、このブロックで新しい表を割り当て、新しい表にデータを挿入したとします。この時点で、データベースはブロック13を新しいブロックとしてフォーマットします。これで、更新操作の前の一部のREDOが欠落していた場合でも、このブロックでリカバリを続行できるようになります。
次の前提条件がRECOVER ... BLOCK
コマンドに適用されます。
ARCHIVELOG
モードで実行されており、現行の制御ファイルを使用してオープンまたはマウントされている必要があります。
プロキシ・コピー・バックアップのみが存在する場合は、それらをディスク上のデフォルト以外の場所にリストアできます。この場合、Recovery Managerは、プロキシ・バックアップをデータファイルのコピーとみなして、ブロック・メディア・リカバリ中にプロキシ・バックアップ内のブロックを検索します。
Recovery Managerは、レベル1の増分バックアップを使用できません。ブロック・メディア・リカバリでは、アーカイブREDOログが欠落しているか、またはアクセスできない場合はリカバリを実行できません。ただし、REDOレコードが欠落している場合はリカバリを実行できる場合もあります。
破損していない古いバージョンの破損ブロックが含まれている場合にフラッシュバック・ロギングが有効になっていると、Recovery Managerは、それらのブロックを使用し、リカバリに必要な時間を短縮できます。
通常、ブロック破損は次の場所に表示されます。
LIST FAILURE
、VALIDATE
またはBACKUP ... VALIDATE
コマンドの結果
V$DATABASE_BLOCK_CORRUPTION
ビュー
ANALYZE
TABLE
およびANALYZE
INDEX
の結果
たとえば、ユーザー・トレース・ファイルに次のメッセージが表示される場合があります。
ORA-01578: ORACLE data block corrupted (file # 7, block # 3) ORA-01110: data file 7: '/oracle/oradata/trgt/tools01.dbf' ORA-01578: ORACLE data block corrupted (file # 2, block # 235) ORA-01110: data file 2: '/oracle/oradata/trgt/undotbs01.dbf'
次の手順では、リカバリが必要なブロックを識別し、使用可能なすべてのバックアップを使用してこれらのブロックのリストアおよびリカバリを実行します。
トレース・ファイルおよびアラート・ログを検索する最も簡単な方法は、SQL*Plusをターゲット・データベースに接続し、次の問合せを実行する方法です。
SELECT NAME, VALUE FROM V$DIAG_INFO;
SHOW ALL
コマンドを実行して、適切なチャネルが事前構成されていることを確認します。
RECOVER ... BLOCK
コマンドを実行します。次の例では、2つのブロックをリカバリします。
RECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 19;
Recovery Managerの動作を制御する様々なオプションを指定することもできます。次の例は、ブロックの検索時にタグmondayam
が含まれているバックアップのみが使用されることを示しています。FROM BACKUPSET
オプションを使用して、Recovery Managerによって検索されるバップアップのタイプを制限できます。または、EXCLUDE FLASHBACK LOG
を使用して、Recovery Managerによるフラッシュバック・ログの検索を制限できます。
RECOVER DATAFILE 8 BLOCK 13 DATAFILE 2 BLOCK 199 FROM TAG mondayam;
この例では、Recovery ManagerがV$DATABASE_BLOCK_CORRUPTION
ビューに表示されているすべてのブロックを自動的にリカバリします。
V$DATABASE_BLOCK_CORRUPTION
を問い合せて、破損ブロックが存在するかどうかを確認します。たとえば、次の文を実行します。
SQL> SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
V$DATABASE_BLOCK_CORRUPTION
内の破損とマークされたすべてのブロックをリカバリします。次のコマンドを実行すると、ビューに記録された物理的に破損しているすべてのブロックが修復されます。
RMAN> RECOVER CORRUPTION LIST;
ブロックは、修復された後、データベースによってV$DATABASE_BLOCK_CORRUPTION
から削除されます。
|
![]() Copyright © 2003, 2008, Oracle Corporation. All Rights Reserved. |
|