16 データベース・ファイルおよびバックアップの検証

この章では、データベース・ファイルおよびバックアップの整合性をチェックする方法について説明します。この章のトピックは、次のとおりです:

16.1 RMANの検証の概要

検証により、バックアップの整合性を確認できます。

16.1.1 RMANの検証の目的

RMANの検証は、ブロックが破損していないか、およびファイルが欠落していないかどうかを確認することを主な目的としています。また、RMANを使用して、バックアップがリストア可能かどうかを確認することもできます。

RMANの次のコマンドを使用すると、検証を実行できます。

  • VALIDATE

  • BACKUP ... VALIDATE

  • RESTORE ... VALIDATE

関連項目:

16.1.2 RMANの検証の基本的な概念

バックアップ・ファイルが使用できなくなったり、リストアされたデータファイルが破損する可能性がある操作は防止されます。

データベースは、自動的に次の処理を実行します。

  • データファイルのリストアまたはリカバリ中、そのファイルへのアクセスをブロックします。

  • 各データファイルのリストア操作を、一度に1つのみ許可します。

  • 増分バックアップが適切な順序で適用されることを確認します。

  • バックアップ・ファイルに情報を格納して、破損の検出を可能にします。

  • 破損を検出するとすぐに通知できるように、ブロックが読取りまたは書込みされるたびにブロックを確認します。

16.1.2.1 チェックサムおよび破損ブロックについて

破損ブロックとは、変更が行われたため、Oracle Databaseでの検出時に予測される内容とは異なる内容になっているブロックのことです。

ブロックの破損は、次に示す様々な障害によって発生する可能性がありますが、原因はこれらに限定されるわけではありません。

  • ディスクおよびディスク・コントローラの障害

  • メモリー障害

  • Oracle Databaseソフトウェアの不具合

DB_BLOCK_CHECKSUMは、(バックアップ内ではなく)データベース内のデータファイルおよびオンラインREDOログ・ファイルのブロックに対するチェックサムの書込みを制御するデータベース初期化パラメータです。DB_BLOCK_CHECKSUMtypicalに設定されている場合、データベースは、通常の操作中に各ブロックのチェックサムを計算し、ヘッダーにその値を格納してからブロックをディスクに書き込みます。データベースは、後でディスクからブロックを読み取る場合、チェックサムを再計算し、格納されている値と比較します。値が一致しなかった場合、そのブロックは破損しています。

デフォルトでは、BACKUPコマンドは、各ブロックのチェックサムを計算し、その値をバックアップに格納します。DB_BLOCK_CHECKSUMが適用されるのは、バックアップではなくデータベースのデータファイルであるため、この初期化パラメータの値は、BACKUPコマンドでは無視されます。

16.1.2.2 物理および論理ブロック破損について

物理的な破損(メディア破損とも呼ばれます)の場合、ブロックがデータベースで認識されません。チェックサムが無効か、ブロック内容がすべて0(ゼロ)か、またはブロックのヘッダーとフッターが一致していません。

ノート:

デフォルトでは、BACKUPコマンドは、各ブロックのチェックサムを計算し、その値をバックアップに格納します。NOCHECKSUMオプションを指定すると、バックアップの作成時にRMANはブロックのチェックサムを実行しません。

論理的な破損の場合、ブロックの内容は論理的に一貫性のない状態になっています。論理的破損の例として、行の一部や索引エントリの破損があげられます。RMANは、論理的な破損を検出すると、アラート・ログおよびサーバー・セッションのトレース・ファイルにそのブロックを記録します。

デフォルトでは、RMANは、論理的な破損を確認しません。ただし、BACKUPコマンドでCHECK LOGICALを指定すると、RMANは、データおよび索引ブロックをテストして、行ピースまたは索引エントリの破損などの論理的な破損がないかどうかを調べ、その結果を自動診断リポジトリ(ADR)内のアラート・ログに記録します。ファイルのバックアップ時またはリストア時に、RMANを次の構成で使用すると、RMANは、検出可能なすべてのタイプのブロック破損を検出します。

  • データベースがデータファイルのチェックサムを(バックアップに対してではなく、データベースで使用中のデータファイルに対して)自動的に計算するように、データベースの初期化パラメータ・ファイルでDB_BLOCK_CHECKSUM=typicalを設定する。

  • RMANがマーク解除されたブロック破損を許容しないように、BACKUPコマンドの前にSET MAXCORRUPTを使用しない。

  • バックアップの書込み時にRMANがチェックサムを計算するように、BACKUPコマンドにNOCHECKSUMオプションを指定しない

  • RMANが物理的な破損と論理的な破損を確認するように、BACKUPコマンドおよびRESTOREコマンドにCHECK LOGICALオプションを指定する。

16.1.2.3 RMANバックアップの破損ブロックの制限について

SET MAXCORRUPTコマンドを使用すると、RMANバックアップで1つのファイルに許容されるマーク解除された破損の合計数を設定できます。デフォルトは0(ゼロ)です。つまり、RMANはいずれの種類のマーク解除された破損ブロックも許容しません。

マーク解除された破損ブロックがバックアップ中に検出された際にMAXCORRUPTの制限を超えていると、RMANはバックアップを終了します。これ以外の場合、RMANは、ブロックが破損とマークされていることを示す特別なヘッダーを付けて、新しく検出された破損ブロックをバックアップに書き込みます。VALIDATEコマンドを使用すると、破損とマークされているブロックを特定でき、また、マーク解除された破損ブロックを検出できます。

破損とマークされた複数のブロックが含まれるデータファイルをリストアすることができますが、これは、RMANがバックアップで、マークされた破損ブロックを許容するため、また、RMANがマーク解除された破損ブロックを、そのバックアップで破損とマークすることを許容する指示を受け取ることができる(MAXCORRUPTを使用する場合)ためです。(新たな破損が発生していないと想定して)リストアされたこのデータファイルをバックアップする場合、MAXCORRUPT設定がなくても、バックアップは正常に実行されます。これは、以前にマークされた破損は、RMANによるバックアップの完了を妨害しないためです。

関連項目:

SET MAXCORRUPTの構文については、Oracle Databaseバックアップおよびリカバリ・リファレンスを参照してください。

16.1.2.4 ブロック破損の検出について

Oracle Databaseでは、ブロックの破損を検出、修復および監視する様々な方法がサポートされています。

方法は、破損がブロック間の破損ブロック内の破損かによって異なります。ブロック内の破損は、ブロック自体内で発生します。この破損は、物理的な破損または論理的な破損のいずれかです。ブロック間の破損の場合、論理的な破損のみがブロック間で発生します。

たとえば、V$DATABASE_BLOCK_CORRUPTIONビューではブロック内の破損が記録され、自動診断リポジトリ(ADR)ではすべてのタイプの破損が追跡されます。表16-1に、データベースで様々なタイプのブロック破損を処理する方法を示します。

表16-1 ブロックの破損の検出、修復および監視

レスポンス ブロック内の破損 ブロック間の破損

検出

RMAN(BACKUPコマンドなど)、DBVERIFYユーティリティなどのすべてのデータベース・ユーティリティによって、ブロック内の破損が検出されます。データベース・プロセスでORA-1578エラーが発生すると、破損が検出され、監視されます。

DBVERIFYおよびANALYZE文でのみ、ブロック間の破損が検出されます。

追跡

V$DATABASE_BLOCK_CORRUPTIONビューに、RMANコマンド、ANALYZE、SQL問合せなどのOracle Databaseコンポーネントによって破損とマークされたブロックが表示されます。ブロック内の破損を検出したプロセスでは、このビューおよびADRにブロック破損が記録されます。

データベースは、ADRでこのタイプのブロック破損を監視します。

修復

修復方法には、ブロック・メディア・リカバリ、データファイルのリストア、増分バックアップによるリカバリおよびブロックの新規作成などがあります。ブロック・メディア・リカバリでは、物理的な破損は修復できますが、論理的な破損は修復できません。

修復を行うかブロックが修復されたことを検出するすべてのRMANコマンドによって、V$DATABASE_BLOCK_CORRUPTIONが更新されます。たとえば、ブロック・メディア・リカバリが正常に終了すると、RMANでリポジトリが更新されます。BACKUPRESTOREまたはVALIDATEコマンドによって、ブロックの破損がなくなったことが検出された場合、修正済のブロックがビューから削除されます。

ブロック間の破損は、オブジェクトの削除、索引の再構築などの手動による方法で修正する必要があります。

16.2 VALIDATEコマンドによるブロック破損の確認

VALIDATEコマンドを使用すると、データベース・ファイル内の物理的および論理的な破損を手動で確認できます。

このコマンドでは、BACKUP VALIDATEと同じタイプのチェックが実行されますが、VALIDATEでは、より広範囲のオブジェクトをチェックできます。たとえば、VALIDATE DATAFILE ... BLOCKコマンドを使用すると、個々のブロックを検証できます。

検証するバックアップ・ピースのコピー数を指定するには、VALIDATE FROM COPY NUMBERコマンドを実行します。

すべてのファイルを検証する場合、RMANによって、入力ファイルのすべてのブロックが確認されます。バックアップの検証によって、以前にマーク解除された破損ブロックが検出された後、RMANは破損を示している行を反映してV$DATABASE_BLOCK_CORRUPTIONビューを更新します。

バックアップ・セット内の1つ以上のバックアップ・ピースが欠落または破損している可能性がある場合は、VALIDATE BACKUPSETを使用します。このコマンドでは、バックアップ・セット内のすべてのブロックがチェックされ、バックアップがリストア可能かどうかが確認されます。RMANはブロックの破損を検出すると、エラーを発行し、検証を終了します。VALIDATE BACKUPSETコマンドでは、ユーザーがチェック対象のバックアップを選択できます。これに対して、RESTOREコマンドのVALIDATEオプションでは、RMANによって選択が行われます。

VALIDATEを使用してデータベース・ファイルおよびバックアップを確認するには:

  1. RMANを起動し、ターゲット・データベースに接続します。

  2. 必要なオプションを指定してVALIDATEコマンドを実行します。

    たとえば、データファイル、制御ファイルおよび(使用されている場合は)サーバー・パラメータ・ファイルをすべて検証するには、次のコマンドをRMANのプロンプトで実行します。

    RMAN> VALIDATE DATABASE;
    

    また、次の例に示すコマンド形式を使用すると、特定のバックアップ・セットを検証することもできます(出力例も示します)。

    RMAN> VALIDATE BACKUPSET 22;
    
    Starting validate at 17-AUG-13
    using channel ORA_DISK_1
    allocated channel: ORA_SBT_TAPE_1
    channel ORA_SBT_TAPE_1: SID=89 device type=SBT_TAPE
    channel ORA_SBT_TAPE_1: Oracle Secure Backup
    channel ORA_DISK_1: starting validation of datafile backup set
    channel ORA_DISK_1: reading from backup piece
    /disk1/oracle/work/orcva/RDBMS/backupset/2013_08_16/o1_mf_nnndf_
    TAG20130816T153034_2g774bt2_.bkp
    channel ORA_DISK_1: piece
    handle=/disk1/oracle/work/orcva/RDBMS/backupset/2013_08_16/o1_mf_nnndf_
    TAG20130816T153034_2g774bt2_.bkp tag=TAG20130816T153034
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    Finished validate at 17-AUG-13
    

    次の例に、データファイル内の個々のデータ・ブロックを調べて破損を確認する方法を示します。

    RMAN> VALIDATE DATAFILE 1 BLOCK 10;
     
    Starting validate at 17-AUG-13
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00001 name=/disk1/oracle/dbs/tbs_01.f
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    List of Datafiles
    =================
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    1    OK     0              2            127             481907
      File Name: /disk1/oracle/dbs/tbs_01.f
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              36
      Index      0              31
      Other      0              58
    
    Finished validate at 17-AUG-13

データファイルの検証のパラレル化

大規模なデータファイルを検証する必要がある場合、RMANは、そのファイルを複数のセクションに分割し、各ファイル・セクションをパラレルに処理することによって、作業をパラレル化できます。複数のチャネルが構成されているか、または割り当てられている場合にチャネルで検証をパラレル化するには、VALIDATEコマンドのSECTION SIZEパラメータを指定します。

ファイルのサイズより大きいセクション・サイズを指定した場合、RMANはファイル・セクションを作成しません。小さなセクション・サイズを指定した結果、セクションの数が256を超えると、RMANは、正確に256になる値までセクション・サイズを増やします。

データファイルの検証をパラレル化するには:

  1. RMANを起動し、ターゲット・データベースに接続します。ターゲット・データベースは、マウントまたはオープンされている必要があります。
  2. SECTION SIZEパラメータを指定してVALIDATEを実行します。

    次の例では、2つのチャネルを割り当て、大規模なデータファイルを検証します。セクション・サイズは1200MBです。

    RUN
    {
      ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
      ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
      VALIDATE DATAFILE 1 SECTION SIZE 1200M;
    }

16.3 BACKUP VALIDATEを使用したデータベース・ファイルの検証

BACKUP VALIDATEコマンドを使用して検証を実行することもできます。

このコマンドでは次のタスクを実行できます。

  • データファイルのブロックの物理的および論理的な破損の確認

  • すべてのデータベース・ファイルが存在するかどうか、および格納場所が正しいかどうかの確認

BACKUP VALIDATEを実行すると、RMANは、実際のバックアップ時と同様に、バックアップするファイル全体を読み取ります。ただし、実際には、バックアップ・セットもイメージ・コピーも作成しません。

BACKUPSETパラメータ、MAXCORRUPTパラメータまたはPROXYパラメータは、BACKUP VALIDATEを指定して使用することはできません。特定のバックアップ・セットを検証するには、VALIDATEコマンドを実行します。

BACKUP VALIDATEコマンドを使用してファイルを検証するには:

  1. RMANを起動し、ターゲット・データベースおよびリカバリ・カタログ(使用している場合)に接続します。
  2. BACKUP VALIDATEコマンドを実行します。

    たとえば、次の例のようにコマンドを実行すると、すべてのデータベース・ファイルおよびアーカイブ・ログがバックアップ可能かどうかを検証できます。このコマンドは物理的な破損のみ確認します。

    BACKUP VALIDATE 
      DATABASE 
      ARCHIVELOG ALL;
    

    物理的な破損に加えて論理的な破損も確認するには、前述のコマンドを次のように少し変更して実行します。

    BACKUP VALIDATE 
      CHECK LOGICAL 
      DATABASE 
      ARCHIVELOG ALL;
    

    前述の例では、RMANクライアントは、実際にファイルをバックアップしたときと同じ出力を表示します。RMANは、ファイルを1つもバックアップできない場合、エラー・メッセージを発行します。たとえば、次のように表示されます。

    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: failure of backup command at 08/29/2013 14:33:47
    ORA-19625: error identifying file /oracle/oradata/trgt/arch/archive1_6.dbf
    ORA-27037: unable to obtain file status
    SVR4 Error: 2: No such file or directory
    Additional information: 3

関連項目:

16.4 リストアする前のバックアップの検証

RESTORE...VALIDATEを実行して、RMANでバックアップから特定のファイルまたはファイルのセットをリストアできるかどうかをテストできます。RMANによって、使用するバックアップが選択されます。

このコマンドでは、データベースがマウントまたはオープンされている必要があります。データファイルのバックアップの検証ではバックアップが読み取られるだけで、本番データファイルには影響を与えないため、データファイルのリストアの検証時にデータファイルをオフラインにする必要はありません。

ディスクまたはテープのファイルを検証する場合、RMANは、バックアップ・ピースまたはイメージ・コピー内のすべてのブロックを読み取ります。また、RMANは、オフサイトのバックアップの検証も行います。この検証は、RMANによって出力ファイルが書き込まれないことを除き、実際のリストア操作と同じです。

また、RMANでは、検証するバックアップ・ピースのコピー数を指定することもできます。

ノート:

RECOVER ... TESTコマンドを使用して、試行リカバリを実行するテスト方法もあります。試行リカバリでは、通常のリカバリと同じ方法でREDOが適用されますが、これはメモリー内のみで行われ、変更は試行後にロールバックされます。

RESTOREコマンドを使用してバックアップを検証するには:

  1. VALIDATEオプションを指定してRESTOREコマンドを実行します。

    次に、データベースおよびすべてのアーカイブREDOログのリストアの検証例を示します。

    RESTORE DATABASE VALIDATE;
    RESTORE ARCHIVELOG ALL VALIDATE;
    

    RMANのエラー・スタックが表示されない場合は、後続のステップをスキップします。エラー・メッセージが表示されないということは、実際のリストアおよびリカバリ中にこれらのバックアップを正常に使用できることがRMANで確認されたということを意味しています。

  2. 出力内にエラー・メッセージおよびRMAN-06026メッセージが表示された場合は、問題の原因を調査します。可能な場合は、RMANによるバックアップの検証を妨げている問題を解決し、検証を再試行します。

    次のエラーは、RMANが、指定した1つ以上のファイルを使用可能なバックアップからリストアできないことを意味します。

    RMAN-06026: some targets not found - aborting restore
    

    次の出力例は、指定したバックアップの読取りでRMANが問題を検出したことを示しています。

    RMAN-03009: failure of restore command on c1 channel at 12-DEC-12 23:22:30
    ORA-19505: failed to identify file "oracle/dbs/1fafv9gl_1_1"
    ORA-27037: unable to obtain file status
    SVR4 Error: 2: No such file or directory
    Additional information: 3

関連項目:

RESTORE...VALIDATEコマンドについて学習するには、Oracle Databaseバックアップおよびリカバリ・リファレンスを参照してください。

16.5 CDBおよびPDBの検証

RMANでは、VALIDATEコマンドを使用して、マルチテナント・コンテナ・データベース(CDB)およびプラガブル・データベース(PDB)を検証できます。

また、CDBおよびPDBの両方について、検証するバックアップ・ピースのコピー数を指定することもできます。

この章で説明する手順は、以降の項で説明する相違点を除いて、すべてCDBに当てはまります。

16.5.1 CDB全体の検証

CDBを検証するステップは、CDB以外を検証する場合のステップと同様です。

唯一の違いは、共通のSYSBACKUPまたはSYSDBA権限を持つ共通ユーザーとしてrootに接続する必要があるということです。その後、VALIDATE DATABASEおよびRESTORE DATABASE VALIDATEコマンドを使用します。

rootに接続している場合、次のコマンドでCDB全体が検証されます。

VALIDATE DATABASE;

次のコマンドは、rootを検証します。

VALIDATE DATABASE ROOT;

16.5.2 PDBの検証

PDBの検証には複数の方法があります。

次の方法のいずれかを使用して、PDBを検証します。

  • rootに接続し、VALIDATE PLUGGABLE DATABASEまたはRESTORE PLUGGABLE DATABASE VALIDATEコマンドを使用します。こうすると、1つ以上のPDBを検証できます。

    rootに接続している場合、次のコマンドでPDB hr_pdbおよびsales_pdbが検証されます。

    VALIDATE PLUGGABLE DATABASE hr_pdb, sales_pdb;
    
  • PDBに接続し、VALIDATE DATABASEおよびRESTORE DATABASE VALIDATEコマンドを使用して1つのPDBのみを検証します。ここで使用するコマンドは、CDB以外に使用するコマンドと同じです。

    PDBに接続している場合、次のコマンドでこのデータベースのリストアが検証されます。

    RESTORE DATABASE VALIDATE;