プライマリ・コンテンツに移動
Zero Data Loss Recovery Appliance保護されたデータベースの構成ガイド
リリース12.1
E57734-09
目次へ移動
目次
索引へ移動
索引

前
次

5 リカバリ・アプライアンスからのデータのリカバリ

この章では、障害発生後、リカバリ・アプライアンスに格納されているバックアップを使用して保護されたデータベースをリカバリする方法について説明します。

この章の構成は、次のとおりです。

5.1 リカバリ・アプライアンスからのデータのリストアおよびリカバリの概要

保護されたデータベース全体、1つ以上のデータ・ファイル、または1つ以上の表領域をリカバリできます。保護されたデータベース内の特定のデータ・ブロックのみが破損している場合は、ブロック・リカバリを実行して破損ブロックのみを修復できます。リカバリ・アプライアンスを使用したリカバリの手順は、従来のRMAN環境で使用しているデータベースのリカバリの手順と同じです。主な違いは、リカバリ・アプライアンス・バックアップ・モジュールに対応するRMANチャネルを構成または割り当てることにより、リカバリ・アプライアンスをリカバリ・データのソースとして使用することです。

保護されたデーベースのリストアおよびリカバリには、Enterprise Manager Cloud Control (Cloud Control)またはRMANを使用できます。

5.2 Cloud Controlを使用した保護されたデータベースのリカバリ

Cloud Controlでは次の手法を使用して、保護されたデータベースをリカバリします。

  • Oracle 推奨のリカバリ

    Oracle推奨のリカバリでは、データ・リカバリ・アドバイザで推奨されている自動修復機能を使用して、保護されたデータベースをリカバリできます。データ・リカバリ・アドバイザを使用すると、データ障害の自動診断、影響の評価、ユーザーへの障害報告、適切な修復オプションの判別、およびユーザー・リクエストに応じた修復の実行が行われます。

    関連項目:

    Oracle推奨のリカバリを実行する方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  • ユーザー指示のリカバリ

    この手法では、指定の基準に基づいて手動リカバリを実行します。それには、リカバリする必要のあるオブジェクト(データベース、データ・ファイル、表領域、アーカイブREDOログ)、完全リカバリまたはPoint-in-Timeリカバリのどちらを実行するか、データベース・ファイルをリカバリする必要のある保存先などの情報を指定する必要があります。

    関連項目:

    ユーザー指示のリカバリを実行する方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

5.2.1 Cloud Controlを使用して保護されたデータベースをリカバリするための前提条件

  • 保護されたデータベースがターゲットのリカバリ・アプライアンスに登録されている必要があります。

  • リカバリ・プロセスに必要なバックアップがリカバリ・アプライアンスに格納されている必要があります。Point-in-Timeリカバリを実行する場合は、保護されたデータベースに定義されているリカバリ・ウィンドウ内の任意の時点にリカバリできます。

5.2.2 Cloud Controlを使用したブロック・メディア・リカバリの実行

この項では、Oracle推奨のリカバリを使用して破損データ・ブロックをリカバリする方法について説明します。

破損データ・ブロックが原因で発生した障害からリカバリする手順:

  1. 「Cloud Controlを使用した保護されたデータベースのホーム・ページへのアクセス」の説明に従って、保護されたデータベースのホーム・ページにアクセスします。
  2. 「Cloud Controlを使用して保護されたデータベースをリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  3. 「可用性」メニューから「バックアップとリカバリ」を選択し、次に「リカバリの実行」を選択します。

    「リカバリの実行」ページが表示されます。データ・リカバリ・アドバイザによって診断された障害はすべて「Oracle推奨のリカバリ」セクションに表示されます。

  4. 「アドバイスとリカバリ」をクリックします。

    データ・リカバリ・アドバイザによって検出された障害が一覧で表示されます。

  5. 「ユーザー指示のリカバリ」セクションで、次のオプションを選択します。
    • 「リカバリの有効範囲」で「データファイル」を選択します。

    • 「操作タイプ」で「ブロック・リカバリ」を選択します。

  6. 「リカバリ」をクリックして、「オブジェクト・レベルのリカバリの実行: ブロック・リカバリ」ページを表示します。
  7. 「破損リスト」を選択して「次へ」をクリックします。

    「オブジェクト・レベルのリカバリの実行: 破損ブロック」ページが表示されます。「データファイル名」セクションに、該当するデータ・ファイル名と破損ブロックのブロックIDが表示されます。

  8. データ・ファイル名と破損ブロックのリストを確認して、「次へ」をクリックします。

    「オブジェクト・レベルのリカバリの実行: スケジュール」ページが表示されます。リカバリ・ジョブのデフォルトの名前と説明が入力されています。

  9. 必要に応じてリカバリ・ジョブの名前と説明を編集し、「次へ」をクリックします。

    「オブジェクト・レベルのリカバリの実行: 確認」ページが表示されます。

  10. (オプション)このリカバリ・ジョブに対して生成されたRMANスクリプトを表示して編集するには、「RMANスクリプトの編集」をクリックします。
  11. 「ジョブの発行」をクリックします。

    ジョブが正常に発行されたことを示すメッセージが表示されます。

  12. 「ジョブの表示」をクリックします。

    ジョブ実行の詳細が記載された「ジョブ」ページが表示されます。「サマリー」セクションに、ジョブのタイプ、保護されたデータベース名、SID、リカバリ・アプライアンス・カタログのユーザー名などの情報が表示されます。このページの下部にある表には、実行手順とそのステータスが表示されます。

5.2.3 Cloud Controlを使用したデータベース全体のリカバリ

この項では、Cloud Controlのユーザー指示のリカバリ・プロセスを使用して、保護されたデータベース全体を現在の時間にリカバリする方法について説明します。

保護されたデータベースの完全リカバリを実行する手順:

  1. 「Cloud Controlを使用した保護されたデータベースのホーム・ページへのアクセス」の説明に従って、保護されたデータベースのホーム・ページにアクセスします。
  2. 「Cloud Controlを使用して保護されたデータベースをリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  3. 「可用性」メニューから「バックアップとリカバリ」を選択し、次に「リカバリの実行」を選択します。

    「リカバリの実行」ページが表示されます。

  4. 「ユーザー指示のリカバリ」セクションで、次のオプションを選択します。
    • 「リカバリの有効範囲」で「データベース全体」を選択します。

    • 「操作タイプ」で「現在の時間または前のPoint-in-Timeへのリカバリ」を選択します。

  5. 「リカバリ」をクリックして、「データベース全体のリカバリの実行: Point-in-Time」ページを表示します。
  6. 「現在の時間へのリカバリ」を選択して、「次へ」をクリックします。

    「データベース全体のリカバリの実行: 名前の変更」ページが表示されます。

  7. 「いいえ。デフォルトの場所にファイルをリストアします。」を選択し、「次へ」をクリックします。

    「データベース全体のリカバリの実行: スケジュール」ページが表示されます。

  8. (オプション)「ジョブ名」および「ジョブの説明」に入力されているデフォルト名を変更します。
  9. 「次へ」をクリックして、「データベース全体のリカバリの実行: 確認」ページを表示します。
  10. (オプション)このリカバリ・ジョブに対して生成されたRMANスクリプトを編集するには、「RMANスクリプトの編集」をクリックします。
  11. 「ジョブの発行」をクリックします。

    ジョブが正常に発行されたことを示すメッセージが表示されます。

  12. 「ジョブの表示」をクリックします。

    ジョブ実行の詳細が記載された「ジョブ」ページが表示されます。「サマリー」セクションに、ジョブのタイプ、保護されたデータベース名、SID、リカバリ・アプライアンス・カタログのユーザー名などの情報が表示されます。「サマリー」ページの下部にある表には、実行手順とそのステータスが表示されます。

5.3 コマンドラインを使用したリカバリ・アプライアンスからのデータのリストアおよびリカバリ

この項の各例では、リストアおよびリカバリの一般的な実行例を示す操作手順について説明します。リカバリ・アプライアンスを使用したバックアップ操作の設定が保護されたデータベースで正しく構成されている場合は(「保護されたデータベースのバックアップおよびリカバリ設定の構成(コマンドライン)」を参照)、リカバリ操作にも同じ構成を使用できます。

リカバリ・アプライアンスを使用してリストアおよびリカバリ操作を行う場合、RMAN接続に使用する構文はRMANリカバリ・カタログへの通常の接続で使用するものと同じです。唯一の違いは、リカバリ・アプライアンス・カタログに接続してRMANチャネルを構成する点です(「リカバリ・アプライアンスのバックアップおよびリカバリ操作でのRMANチャネルの使用方法」を参照)。

関連項目:

データベースのリカバリ方法の詳細な説明は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

この項には次の例が含まれます:

5.3.1 リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件

リカバリ・アプライアンスに格納されているバックアップを使用して保護されたデータベースのリストアおよびリカバリを行う前に、次の前提条件を満たしていることを確認してください。

5.3.2 ダウンストリーム・リカバリ・アプライアンスを使用した保護されたデータベースのリストア

リカバリ・アプライアンス・レプリケーションが構成されている場合、保護されたデータベースはアップストリーム・リカバリ・アプライアンスにバックアップを送信します。アップストリーム・リカバリ・アプライアンスはこれらのバックアップをダウンストリーム・リカバリ・アプライアンスに転送します。障害発生時にアップストリーム・リカバリ・アプライアンスが使用できない場合は、ダウンストリーム・リカバリ・アプライアンスを使用してリストア操作を実行できます。

関連項目:

レプリケーションの簡単な概要は、「保護されたデータベースとリカバリ・アプライアンスのアーキテクチャ」を参照してください

次の概要手順に従って、保護されたデータベースをダウンストリーム・リカバリ・アプライアンスから直接リストアします。

  1. 保護されたデータベースがダウンストリーム・リカバリ・アプライアンスとの認証に使用するVPCユーザーの資格証明が格納されるOracleウォレットを作成します。

    注意:

    リストア操作を実行する前に保護されたデータベースをダウンストリーム・リカバリ・アプライアンスに明示的に追加または登録する必要はありません。アップストリームとダウンストリームのリカバリ・アプライアンス間でレプリケーションが構成されている場合は、アップストリーム・リカバリ・アプライアンスに登録済の保護されたデータベースがダウンストリーム・リカバリ・アプライアンスに登録されます。

  2. 保護されたデータベースにはTARGETとして、ダウンストリーム・リカバリ・アプライアンス・カタログにはCATALOGとして接続します。

  3. ダウンストリーム・リカバリ・アプライアンスに対応するRMAN SBTチャネルを割り当て、保護されたデータベースをMOUNTモードに設定して、保護されたデータベースをリストアします。

    これらの文はすべてRUNブロックで囲む必要があります(「例: 既存の現行制御ファイルを使用したデータベース全体のリストアおよびリカバリ」を参照)。

5.3.3 例: 既存の現行制御ファイルを使用したデータベース全体のリストアおよびリカバリ

この例では、保護されたデータベース内の一部またはすべてのデータ・ファイルが損失または破損していると仮定します。ただし、制御ファイルは使用できます。

保護されたデータベース内のすべてのデータ・ファイルをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. 次のコマンドを使用してすべてのデータ・ファイルをリストアおよびリカバリします。
    STARTUP MOUNT;
    RUN 
    {
      RESTORE DATABASE;
      RECOVER DATABASE;
      ALTER DATABASE OPEN;
    }
    

5.3.4 例: 指定したPoint-in-Timeへのデータベース全体のリカバリ

この例では、保護されたデータベースのPoint-in-Timeリカバリ(PITR)を実行する方法を示します。PITRは、保護されたデータベースを以前の日付に戻して、ユーザー・エラー(表の誤削除、間違った表の更新など)、メディア障害、またはデータベースのアップグレードの失敗からリカバリする場合に必要になることがあります。制御ファイルをリストアする必要があるのは、制御ファイルに構成変更(表領域の作成や削除など)があった場合のみです。SET UNTIL句を使用して、保護されたデータベースをリカバリする必要のある目的の時間、SCN、またはログ順序を指定します。

保護されたデータベースでフラッシュバック・データベースが有効になっている場合は、この機能を使用して以前のPoint-in-Timeにリカバリすることもできます。

関連項目:

  • 『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』

  • 『Oracle Database Recovery Managerリファレンス』

保護されたデータベース全体(制御ファイルを含む)を特定のPoint-in-Timeにリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. 保護されたデータベースをリカバリする必要のある目的のPoint-in-Timeを指定します。Point-in-TimeにはSCN、時間、またはログ順序番号を指定できます。

    次の問合せを使用して、タイムスタンプとSCN間の変換を行います。

    SQL> set linesize 222
    SQL> select name, current_scn, scn_to_timestamp(current_scn) "Time" 
         from v$database;
    
    NAME        CURRENT_SCN   TIME
    ---------   -----------   ------------------------------------
    ORA121      122019556     22-APR-14 12.30.15.000000000 PM
    

    保護されたデータベースを使用できない場合は、リカバリ・アプライアンス・カタログのビューを問い合せて、SCN番号を取得します。リカバリ・ウィンドウの範囲の日時、および保護されたデータベースのdb_unique_nameを入力する必要があります。リカバリ・アプライアンス・カタログに接続されている状態で、次の問合せを実行します(サンプル出力もあわせて表示)。

    SELECT
    a.db_key,a.db_name,a.sequence#,a.first_change#,a.next_change#,a.completion_time
    FROM rc_archived_log a, db db_key
    WHERE reg_db_unique_name = 'PTDB2' AND a.db_key = db.db_key 
        AND to_date('16-Jul-2014 06:55:23','DD-Mon-YYYY HH24:MI:SS') BETWEEN       
              a.first_time AND a.next_time;
    
    DB_KEY DB_NAME   SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#   COMPLETION_TIME
    ------ -------- ---------- ------------- ------------   ---------------
    24201  PTDB2      9911      288402086    288430116     14/07/2014 5:27:49 PM
    

    FIRST_CHANGE#はアーカイブREDOログ内の最初のSCN番号に相当し、NEXT_CHANGE#はアーカイブREDOログ内の最後のSCN番号です。

  4. 制御ファイルと保護されたデータベースをリストアおよびリカバリします。
    STARTUP NOMOUNT;
    RUN 
    {
       SET UNTIL TIME "TO_DATE('2014-14-07:17:27:49','yyyy-dd-mm:hh24:mi:ss')";
       RESTORE CONTROLFILE;
       ALTER DATABASE MOUNT;
       RESTORE DATABASE;
       RECOVER DATABASE;
       ALTER DATABASE OPEN RESETLOGS;
    }
    

5.3.5 例: 制御ファイルのリストアおよびリカバリ

この例では、制御ファイルのすべてのコピーが消失した後で、保護されたデータベースをリカバリする方法を示します。制御ファイルの複数のコピーを別々のディスク場所に作成しておくことを強くお薦めします。

保護されたデータベースの制御ファイルをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. 次のコマンドを使用して、制御ファイルをリストアしてからデータベースをマウントします。
    STARTUP NOMOUNT;
    RUN 
    {
      RESTORE CONTROLFILE;
      ALTER DATABASE MOUNT;
    }
    

5.3.6 例: 保護されたデータベースの表領域のリストアおよびリカバリ

この例では、保護されたデータベース内の1つ以上の表領域を誤って削除または破損した後で、これらの表領域をリストアおよびリカバリする方法を示します。この例では、データベースが稼働中で、影響を受けた表領域のみをリストアするものと仮定します。

1つ以上の表領域をリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. 影響を受けた表領域をリストアおよびリカバリします。

    次のコマンドでは、USERS表領域をリストアおよびリカバリします。

    RUN 
    {
      SQL 'ALTER TABLESPACE users OFFLINE';
      RESTORE TABLESPACE users;
      RECOVER TABLESPACE users;
      SQL 'ALTER TABLESPACE users ONLINE';
    }
    

5.3.7 例: 保護されたデータベースのデータ・ファイルのリストアおよびリカバリ

この例では、誤って削除された、または破損したデータ・ファイルをリストアおよびリカバリする方法を示します。

保護されたデータベースのデータ・ファイルをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. 次のコマンドを使用して、保護されたデータベース内の影響を受けたデータ・ファイルをリストアおよびリカバリします。

    次のコマンドでは、保護されたデータベース内のデータ・ファイル3をリストアおよびリカバリします。

    RUN
    {
      SQL 'ALTER DATABASE DATAFILE 3 OFFLINE';
      RESTORE DATAFILE 3;
      RECOVER DATAFILE 3;
      SQL 'ALTER DATABASE DATAFILE 3 ONLINE';
    }
    

5.3.8 例: PDBのリストアおよびリカバリ

Oracle Database 12cリリース1で導入されたマルチテナント・アーキテクチャを使用すると、ユーザーが作成したゼロ(0)個以上のプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)としてOracle Databaseを機能させることができます。Oracle Database 12cより前のOracleデータベースはすべて非CDBです。

CDBには、ルート、シード、ユーザーが作成したPDBなどのコンポーネントが含まれます。ルートには、共通ユーザーおよびOracle提供のメタデータ(Oracle提供のパッケージのソース・コードなど)が格納されます。シードは、新しいPDBの作成に使用できるテンプレートです。PDBは、Oracle Netクライアントに非CDBとして表示されるスキーマ、スキーマ・オブジェクトおよび非スキーマ・オブジェクトのポータブル・コレクションです。

この項では、PDBの様々なリストアおよびリカバリ・シナリオについて説明します。PDBのリストアおよびリカバリの手順は、非CDBのリストアおよびリカバリ操作で使用する手順と似ています。この項には次の例が含まれます:

5.3.8.1 PDB全体の完全リカバリの実行

この例では、保護されたデータベース内のPDBの完全リカバリを実行する方法を示します。

PDB全体をリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、CDBのルートにTARGETとして、リカバリ・アプライアンス・カタログにCATALOGとして接続します。
  3. CDBで次の問合せを実行して、リストアする必要のあるPDBを特定します。
    SELECT name FROM v$pdbs;
    
  4. 保護されたデータベース内の必要なPDBをリストアおよびリカバリします。

    次のコマンドでは、hr_pdbというPDBをリストアおよびリカバリします。

    RUN 
    {
      ALTER PLUGGABLE DATABASE "hr_pdb" CLOSE IMMEDIATE;
      RESTORE PLUGGABLE DATABASE 'hr_pdb';
      RECOVER PLUGGABLE DATABASE 'hr_pdb';
      ALTER PLUGGABLE DATABASE "hr_pdb" OPEN;
    }
    

5.3.8.2 PDB全体のPoint-in-Timeリカバリの実行

この例では、保護されたデータベース内の1つ以上のPDBに対してPoint-in-Timeリカバリを実行する方法を示します。PDBをリカバリする必要のある目的の時点を指示するには、SET UNTIL句を指定します。

PDBを特定のPoint-in-Timeにリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、CDBのルートにTARGETとして、リカバリ・アプライアンス・カタログにCATALOGとして接続します。
  3. CDBで次の問合せを実行して、リストアする必要のあるPDBを特定します。
    SELECT name FROM v$pdbs;
    
  4. 影響を受けたPDBを特定の時点にリストアおよびリカバリします。

    次のコマンドでは、hr_pdbというPDBを、SET UNTIL句で指定した時点にリストアおよびリカバリします。

    RUN
    {
      SET UNTIL TIME "to_date('2014-08-16 09:00:00','YYYY-MM-DD HH24:MI:SS')";
      ALTER PLUGGABLE DATABASE "hr_pdb" CLOSE IMMEDIATE;
      RESTORE PLUGGABE DATABASE 'hr_pdb';
      RECOVER PLUGGABLE DATABASE 'hr_pdb';
      ALTER PLUGGABLE DATABASE hr_pdb OPEN RESETLOGS;
    }
    

5.3.8.3 PDBの特定のデータ・ファイルのリカバリ

PDB内のデータ・ファイルをリストアおよびリカバリする方法は、RMANを使用して任意のデータ・ファイルをリストアおよびリカバリする方法と似ています。この例では、PDB内のデータ・ファイルをリストアおよびリカバリする方法を示します。

PDBの特定のデータ・ファイルをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、CDBのルートにTARGETとして、リカバリ・アプライアンス・カタログにCATALOGとして接続します。
  3. CDBで次の問合せを実行して、リストアする必要のあるPDBを特定します。
    SELECT name FROM v$pdbs;
    
  4. 次の問合せを使用して、リカバリする必要のあるPDB内のデータ・ファイルの番号を特定します。
    SELECT p.PDB_ID, p.PDB_NAME, d.FILE_ID, d.TABLESPACE_NAME, d.FILE_NAME
      FROM DBA_PDBS p, CDB_DATA_FILES d
      WHERE p.PDB_ID = d.CON_ID
      ORDER BY p.PDB_ID;
    
  5. PDB内の影響を受けたデータ・ファイルをリストアおよびリカバリします。

    次の例では、PDB内のデータ・ファイル番号10をリストアおよびリカバリします。

    RUN 
    {
      SQL 'ALTER DATABASE DATAFILE 10 OFFLINE';
      RESTORE DATAFILE 10;
      RECOVER DATAFILE 10;
      SQL 'ALTER DATABASE DATAFILE 10 ONLINE';
    }

5.3.8.4 PDBの特定の表領域のリカバリ

この例では、保護されたデータベース内のSH_PDBというPDBに格納されている表領域USR_TBSをリストアおよびリカバリする方法を示します。

PDB内の表領域のリストアおよびリカバリは、通常の表領域のリストアおよびリカバリと似ています。違いは、表領域をプラガブル・データベース(pdb_name:tablespace_name)にマップする必要があるという点です。

PDBの特定の表領域をリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、CDBのルートにTARGETとして、リカバリ・アプライアンス・カタログにCATALOGとして接続します。
  3. 影響を受けた表領域をオフライン・モードに設定します。

    次の例では、sh_pdbというPDB内の表領域use_tbsをオフライン・モードに設定します。

    ALTER TABLESPACE sh_pdb:usr_tbs OFFLINE;
    
  4. 保護されたデータベース内でPDBに格納されている影響を受けた表領域をリストアおよびリカバリします。

    次の例では、sh_pdbというPDB内の表領域usr_tbsをリストアおよびリカバリします。

    RUN 
    {
      RESTORE TABLESPACE sh_pdb:usr_tbs;
      RECOVER TABLESPACE sh_pdb:usr_tbs;
    }
    
  5. リストアおよびリカバリ済の表領域をオンラインに設定します。

    次の例では、sh_pdbというPDB内の表領域usr_tbsをオンラインに設定します。

    ALTER TABLESPACE sh_pdb:usr_tbs ONLINE;
    

5.3.9 例: Oracle RAC環境のPDBのリカバリ

Oracle Real Application Clusters (Oracle RAC)環境でPDBをリストアおよびリカバリするプロセスは、Oracle RAC以外のプロセスに少し手順を追加したものです。この例では、Oracle RAC環境でPDBをリカバリする方法を示します。

Oracle RAC環境でPDBをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、CDBのルートにTARGETとして、リカバリ・アプライアンス・カタログにCATALOGとして接続します。
  3. 影響を受けたPDBのすべてのインスタンスがクローズされていることを確認します。

    次のコマンドでは、hr_pdbというPDBのすべてのインスタンスをクローズします。

    ALTER PLUGGABLE DATABASE "hr_pdb" CLOSE IMMEDIATE INSTANCES=all;
    
  4. 保護されたデータベース内の影響を受けたPDBをリストアおよびリカバリします。

    次のコマンドでは、hr_pdbをリストアおよびリカバリします。

    RUN 
    {
      ALTER PLUGGABLE DATABASE "hr_pdb" CLOSE IMMEDIATE;
      RESTORE PLUGGABLE DATABASE 'hr_pdb';
      RECOVER PLUGGABLE DATABASE 'hr_pdb';
      ALTER PLUGGABLE DATABASE "hr_pdb" OPEN RESETLOGS;
      ALTER PLUGGABLE DATABASE "hr_pdb" OPEN INSTANCES=all;
    }
    

5.3.10 例: PDB内の1つまたは複数のデータ・ブロックのリストアおよびリカバリ

ブロック・メディア・リカバリを使用すると、データ・ファイルをオンラインにしたまま1つ以上の破損データ・ブロックをリカバリできます。この例では、ブロック・メディア・リカバリを実行して、1つ以上の破損データ・ブロックをリカバリする方法を示します。

関連項目:

『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』

破損データ・ブロックが存在することを示すには、次のいずれかの方法を使用します。

  • 保護されたデータベースのアラート・ログに、1つ以上のブロックが破損していることを示す次のメッセージを追加します。

    Sun Aug 17 09:34:48 2014
    Hex dump of (file 2, block 16385) in trace file /u01/app/oracle/diag/rdbms/dbstress/dbstress/trace/dbstress_ora_9732.trc
     
    Corrupt block relative dba: 0x00004001 (file 2, block 16385)
    Fractured block found during backing up datafile
    Data in bad block:
     type: 6 format: 2 rdba: 0x00004001
     last change scn: 0x0000.00a564c0 seq: 0x1 flg: 0x06
     spare1: 0x0 spare2: 0x0 spare3: 0x0
     consistency value in tail: 0x00000000
     check value in block header: 0xd6dd
     computed block checksum: 0x58f7
    
  • RMANバックアップ中にブロック破損が検出された場合は、次のようなメッセージを表示します。

    RMAN-08038: channel c3: starting piece 1 at 2014/08/17 09:34:43
    RMAN-03009: failure of backup command on c1 channel at 08/17/2014 09:34:50
    ORA-19566: exceeded limit of 0 corrupt blocks for file /SHARED1/ORADATA/DBF/dbstress/soe.dbf
    .
    .
    RMAN-03002: failure of backup plus archivelog command at 08/17/2014 09:35:55
    RMAN-03009: failure of backup command on c1 channel at 08/17/2014 09:34:50
    ORA-19566: exceeded limit of 0 corrupt blocks for file /SHARED1/ORADATA/DBF/dbstress/soe.dbf
    

保護されたデータベースの破損データ・ブロックをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. リカバリする必要のある破損ブロックを特定します。

    保護されたデータベースのアラート・ログ内のエントリを使用して、破損ブロックおよびその破損ブロックが含まれているデータ・ファイルを特定します。または、V$DATABASE_BLOCK_CORRUPTIONビューを問い合せて、破損ブロックを特定します。

  4. BLOCKRECOVERコマンドを使用して、破損データ・ブロックをリカバリします。

    次の例では、データ・ファイル4のデータ・ブロック46、56および84をリカバリします。

    RUN
    {
      BLOCKRECOVER CORRUPTION LIST;
      BLOCKRECOVER DATAFILE 4 BLOCK 46,56,84;
    }
    

5.3.11 例: リアルタイムREDOトランスポートが構成されているデータベースの重大な記憶域障害後のリカバリ

リアルタイムREDOトランスポートを有効にすると、保護されたデータベースのリカバリ・ダウンタイムの最小化が保証されます。リアルタイムREDOトランスポートの詳細は、「リアルタイムREDOトランスポートについて」を参照してください。保護されたデータベースを記憶域障害の直後にリストアおよびリカバリする場合、メディア・リカバリでデータベースの状態を記憶域障害発生時に最も近い状態に戻すことができるよう、必要な完全アーカイブ・ログ・ファイルと不完全アーカイブ・ログ・ファイルがリストアおよびリカバリされます。

次の例では、リアルタイムREDOトランスポートを使用するように構成済の保護されたデータベースを、記憶域障害によってすべてのデータ・ファイルとオンラインREDOログ・ファイルが消失した後にリカバリします。リカバリ・アプライアンスにあるバックアップとREDOログを使用して、保護されたデータベースを最新のSCNまでリカバリするには、RC_DATABASEビューのFINAL_CHANGE#列を使用します。FINAL_CHANGE#列には、保護されたデータベースをその時点までリカバリする必要がある最新のSCNが格納されています。リカバリを実行する前に、このSCN値をSET UNTIL SCNコマンドで使用します。リカバリは、リカバリ・アプライアンスにあるバックアップとREDOログのみを使用して実行されます。

注意:

次のシナリオでは、RC_DATABASE.FINAL_CHANGE#に値-1が格納されるので、この値をSET UNTIL SCNコマンドで使用することはできません。

  • 保護されたデータベースのバージョンがOracle Database 11g (リリース11.1)以下の場合

  • リアルタイムREDOログ・データのリカバリ・アプライアンスへの送信時に、保護されたデータベースのCOMPATIBLEパラメータが10.0以下に設定されていた場合

かわりに、V$ARCHIVED_LOGビューのNEXT_CHANGE#列を使用して、保護されたデータベースをリカバリする必要のある目的のSCNを特定します。

詳細は、My Oracle Supportノート243760.1を参照してください。My Oracle Supportは、https://support.oracle.comで利用可能です。

関連項目:

FINAL_CHANGE#列の詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

リアルタイムREDOトランスポートを使用するように構成済の保護されたデータベースをリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. RC_DATABASEビューを問い合せて、保護されたデータベースをリカバリする必要のある目的のSCNを特定します。このSCNは、データベースがクラッシュしたときの最新のSCNです。
    SELECT final_change# FROM rc_database WHERE name='MY_DB';
    
  4. 保護されたデータベースをリストアおよびリカバリします。

    この例では、制御ファイルが使用できるものと仮定しています。制御ファイルが消失している場合は、最初に制御ファイルをリカバリしてから、ここで示した手順を実行する必要があります。

    STARTUP NOMOUNT;
    RUN 
    {
      SET UNTIL SCN 23098;
      RESTORE DATABASE;
      RECOVER DATABASE;
      ALTER DATABASE OPEN RESETLOGS;
    }
    

    注意:

    UNTIL SCN句は必須です。特定のSCN値を選択しないと、不完全なREDOが含まれるログはリカバリで適用されません。

5.3.12 例: リアルタイムREDOトランスポートが構成されている場合の制御ファイルとデータベースのリカバリ

この例では、リアルタイムREDOトランスポートを使用するように構成済の保護されたデータベースを、データベース・ファイル全消失からリカバリします。制御ファイルも消失しているので、最初に制御ファイルをリストアしてから保護されたデータベースのリカバリを実行する必要があります。

リアルタイムREDOトランスポートを使用するように構成済の保護されたデータベースを制御ファイルとともにリストアおよびリカバリする手順:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. RC_DATABASEビューを問い合せて、保護されたデータベースをリカバリする必要のある目的のSCNを特定します。このSCNは、データベースがクラッシュしたときの最新のSCNです。
    SELECT final_change# FROM rc_database WHERE name='PTDB1';
    
  4. 保護されたデータベースをリストアおよびリカバリします。

    この例では、制御ファイルが使用できるものと仮定しています。制御ファイルが消失している場合は、最初に制御ファイルをリカバリしてから、ここで示した手順を実行する必要があります。

    STARTUP FORCE NOMOUNT;
    SET DBID=ptdb1;
    RESTORE CONTROLFILE;
    ALTER DATABASE MOUNT;
    RUN
    {
      SET UNTIL SCN 34568;
      RESTORE DATABASE;
      RECOVER DATABASE;
    }
    ALTER DATABASE OPEN RESETLOGS;
    

5.4 リカバリ・アプライアンスからのデータベース複製

保護されたデータベースを複製してスタンバイ・データベースを作成したり、保護されたデータベースをターゲット・ホストにクローニングする必要がある場合、リカバリ・アプライアンス・カタログへの接続、およびバックアップベースの複製の使用によってそれを実行できます。カタログの使用によって、ソース・データベースに接続する必要がなくなります。スタンバイ・データベースまたはクローンの作成のどちらにも、RMAN DUPLICATEコマンドの実行が含まれます。

関連項目:

  • データベースの複製の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  • DUPLICATEコマンドの構文については、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

5.4.1 保護されたデータベースのスタンバイ・データベースの作成

リカバリ・アプライアンスからスタンバイ・データベースを作成するとき、スタンバイ(補助インスタンス)およびリカバリ・アプライアンス・カタログに接続し、FOR STANDBYオプションを指定してRMAN DUPLICATEコマンドを実行します。

注意:

プライマリ・データベースはすでにリカバリ・アプライアンス・カタログに登録されているため、スタンバイ・データベースをリカバリ・アプライアンス・カタログに登録しないでください。

保護されたデータベースのスタンバイ・データベースを作成する手順:

  1. ターゲット・ホストで、次のタスクを実行して補助インスタンスを準備します。
    • スタンバイ・データベース・ファイルを格納するディレクトリを作成します。

    • 補助インスタンス用の初期化パラメータ・ファイルを作成します。

      必須パラメータは、DB_NAMEおよびDB_CREATE_FILE_DESTです。

    • 補助データベース用のパスワード・ファイルを作成します。このパスワード・ファイルは、手順3の複製操作中に上書きされます。

    • 保護されたデータベースと補助インスタンス間のOracle Net接続を確立します。

    • 補助インスタンスをNOMOUNTモードで起動します。

  2. RMANを起動し、CATALOGとしてリカバリ・アプライアンス・カタログに接続し、AUXILIARYとして補助インスタンスに接続します。

    次の例では、ra_rman_userは、保護されたデータベースmy_ptdbがリカバリ・アプライアンスとの認証で使用するリカバリ・アプライアンス・ユーザーです。ra1は、Oracleウォレットに構成されているターゲット・リカバリ・アプライアンスのネット・サービス名です。stdbyは、補助インスタンスのサービス名です。

    %rman
    RMAN> CONNECT CATALOG ra_rman_user@ra1;
    RMAN> CONNECT AUXILIARY "sys@stdby AS SYSDBA";
    
  3. DUPLICATEコマンドを使用してスタンバイ・データベースを作成します。Recovery Applianceバックアップ・モジュールに対応する1つ以上の補助チャネルを構成します。

    次の例では、3つの補助チャネルを構成し、保護されたデータベースmy_ptdbのスタンバイ・データベースを作成します。

    RUN
    {
       ALLOCATE AUXILIARY CHANNEL c1 DEVICE TYPE sbt_tape 
         PARMS='SBT_LIBRARY=/u01/oracle/product/12.1.0.2/dbhome_1/lib/libra.so,
         ENV=(RA_WALLET=location=file:/u01/oracle/product/12.1.0.2/dbhome_1/dbs/ra
         credential_alias=ra-scan:1521/zdlra5:dedicated)' FORMAT'%U_%d';
      ALLOCATE AUXILIARY CHANNEL c2 DEVICE TYPE sbt_tape 
         PARMS='SBT_LIBRARY=/u01/oracle/product/12.1.0.2/dbhome_1/lib/libra.so,
         ENV=(RA_WALLET=location=file:/u01/oracle/product/12.1.0.2/dbhome_1/dbs/ra
         credential_alias=ra-scan:1521/zdlra5:dedicated)' FORMAT'%U_%d';
      ALLOCATE AUXILIARY CHANNEL c3 DEVICE TYPE sbt_tape 
         PARMS='SBT_LIBRARY=/u01/oracle/product/12.1.0.2/dbhome_1/lib/libra.so,
         ENV=(RA_WALLET=location=file:/u01/oracle/product/12.1.0.2/dbhome_1/dbs/ra
         credential_alias=ra-scan:1521/zdlra5:dedicated)' FORMAT'%U_%d';
      DUPLICATE DATABASE my_ptdb FOR STANDBY DORECOVER;
    }
    

5.4.2 保護されたデータベースのクローニング

バックアップベースの複製を使用して、保護されたデータベースをターゲット・ホストにクローニングできます。Oracleが推奨する方法(この項で説明します)では、リカバリ・アプライアンス・カタログに接続します。複製操作にカタログを使用することによって、ソース・データベースへの接続が不要になります。

次の例には、保護されたデータベースをクローニングするOracleのベスト・プラクティスが示され、シナリオにあわせてカスタマイズできるサンプル・スクリプトが含まれています。

この例では、次のことを想定しています。
  • ターゲット・データベースのバックアップがリカバリ・アプライアンスに存在し、補助インスタンスで使用できる。

  • 補助データベースから、ターゲット・データベースのメタデータおよびバックアップを含むリカバリ・アプライアンスへのRMAN接続を使用できる。

  • ソース・データベースと複製データベースの両方で、Oracle Managed Files (OMF)を使用している。

  • オペレーティング・システムにLinuxまたはUNIXが使用されている。

  • 補助データベースのホストに監査ディレクトリが作成されている。

  • バックアップベースの複製の要件が満たされている。

この例に示されているスクリプトは次のタスクを実行します。
  • 既存の補助データベースを削除する

  • ターゲット・データベースをバックアップする

  • ダミーの補助インスタンスを作成し、NOMOUNTモードでオープンする

  • リカバリ・アプライアンスで使用できるターゲット・データベースのバックアップとメタデータを使用して、ターゲット・データベースを複製する

    複製データベースの制御ファイルは+REDO/ORACLE_SID/CONTROLFILE/cf3.ctlとして保存され、データファイルは+DATAディレクトリ内に保存されます。

  • 必要なオブジェクトが複製データベース内に作成されていることを確認する。

ターゲット接続なしでバックアップベースの複製を使用して保護されたデータベースをクローニングする手順:

  1. 補助インスタンスのパラメータ・ファイル(pfile)を作成します。pfileにはDB_NAME初期化パラメータのみが含まれ、複製データベースのSIDに設定されます。

    /home/oracleディレクトリにあるinit_dup.oraという名前の次のpfileは、DB_NAMEパラメータを設定します。dup_dbを複製データベースのSIDに置き換えます。

    *.db_name = 'dup_db'
  2. テキスト・エディタを使用して、次に示す内容に次の変更を加えてシェル・スクリプトを作成します(この例ではdup_db.shという名前)。
    • ORACLE_HOME変数の値を補助インスタンスのOracleホーム・ディレクトリと置き換えます。

    • logdir変数の値を、ログ・ファイルを保存するディレクトリに置き換えます。

    • 次のプレースホルダ(イタリック体で表示)を、目的の複製シナリオに合わせた値に置き換えます。

      dup_db: 補助インスタンスのシステム識別子(SID)とサービス名

      tgt_db: ターゲット・データベースのSIDとサービス名

      sys_pswd: ターゲット・データベースのSYSユーザーのパスワード

      vpc_user: VPCユーザーの名前

      vpc_user_pswd: VPCユーザーvpc_userのパスワード

      ra_scan: リカバリ・アプライアンスの単一クライアント・アクセス名(SCAN)

      ra_servicename: リカバリ・アプライアンスのメタデータ・データベースのサービス名

      system_pswd: ターゲット・データベースのSYSTEMユーザーのパスワード

    • +REDO/ORACLE_SID/CONTROLFILE/cf3.ctlとは異なる名前と場所を使用して、複製データベースの制御ファイルを保存する場合は、dup_aux_db関数のcontrol_filesの値を自分の複製シナリオに適した値に置き換えます。

    • 複製データファイルを+DATAとは異なるディレクトリに保存する場合は、dup_aux_db関数のdb_create_file_destの値を自分の複製シナリオに適した値に置き換えます。

    #!/bin/bash
    export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_2
    export ORACLE_BASE=/uo1/app/oracle
    export ORACLE_SID=dup_db
    export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/Opatch
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib;
    export LD_LIBRARY_PATH
    export logdir=/home/oracle/log
    export dt='date +%y%m%d%H%M%S'
    export NLS_DATE_FORMAT='DD-MM-YYYY HH24:MI:SS'
    
    function drop_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' <<EOF2
    set pagesize 999 linesize 999 heading off feedback off
    select name, open_mode from v\$database;
    shutdown immediate;
    startup mount exclusive restrict;
    drop database;
    exit;
    EOF2
    }
    
    echo "Backup the target database"
    function backup_source_db {
    $ORACLE_HOME/bin/rman target sys/sys_pswd@tgt_db catalog
    vpc_user/vpc_user_pswd@ra_scan:1521/ra_serivcename:dedicated <<EOF
    RUN {
    backup as backupset cumulative incremental level 1 database include current
    controlfile plus archivelog not backed up delete input;}
    exit;
    EOF
    }
    
    sleep 120
    
    echo "List the backup of the target database"
    function check_source_db_backup {
    $ORACLE_HOME/bin/rman target sys/sys_pswd@tgt_db catalog vpc_user/vpc_user_pswd@ra_scan:1521/ra_serivcename:dedicated <<EOF
    LIST BACKUP OF DATABASE COMPLETED AFTER '(SYSDATE-1/24)';
    EOF
    }
    
    echo "Start the auxiliary database in FORCE NOMOUNT mode"
    function nomount_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/rman target / <<EOF2
    startup force nomount pfile='/home/oracle/init_dup.ora';
    exit;
    EOF2
    }
    
    echo "Duplicate the target database"
    function dup_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/rman catalog vpc_user/vpc_user_pswd@ra_scan:1521/ra_serivcename:dedicated AUXILIARY /
    <<EOF
    duplicate database tgt_db to dup_db spfile
    set control_files '+REDO/${ORACLE_SID}/CONTROLFILE/cf3.ctl'
    set db_create_file_dest '+DATA/' ;
    exit;
    EOF
    }
    
    echo "Check schema objects on the target"
    function check_source_db {
    $ORACLE_HOME/bin/sqlplus -s system/system_pswd@tgt_db <<EOF2
    set pagesize 999 linesize 999 heading off feedback off
    select name, open_mode from v\$database;
    select table_name, num_rows from dba_tables where owner='SOE';
    exit;
    EOF2
    }
    
    echo "Check schema objects on the auxiliary"
    function check_aux_db {
    export ORACLE_SID=dup_db
    $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' <<EOF2
    set pagesize 999 linesize 999 heading off feedback off
    select name, open_mode from v\$database;
    select table_name, num_rows from dba_tables where owner='SOE';
    exit;
    EOF2
    }
    
    drop_aux_db
    backup_source_db
    check_source_db_backup
    nomount_aux_db
    dup_aux_db
    check_source_db
    check_aux_db
    
  3. chmodコマンドを使用して、スクリプトdup_db.shの実行権限を設定します。
    $ chmod +x dup_db.sh
  4. 複製ホスト上で(複製データベースをホストする)、dup_db.shスクリプトを実行します。

    次のコマンドは、/home/my_scripts/duplicationディレクトリに保存されているdup_db.shスクリプトを実行します。

    $ ./home/my_scripts/duplication/dup_db.sh