22 表および表パーティションのリカバリ

この章では、表および表パーティションを指定された時点までリカバリする方法について説明します。この章のトピックは、次のとおりです:

22.1 表および表パーティションのリカバリの概要

RMAN RECOVERコマンドによって、RMANバックアップから表および表パーティションをリカバリできます。

ノート:

指定された時点まで表をリカバリする方法は、OracleフラッシュバックおよびTSPITRなど、他にもあります。これらの方法が有用な状況およびこれらの方法を使用して表をリカバリする方法の詳細は、次を参照してください。

22.1.1 RMANバックアップからの表および表パーティションのリカバリの目的

RMANでは、1つまたは複数の表または表パーティションを、他のデータベース・オブジェクトに影響することなく、指定された時点までリカバリすることができます。以前作成されたRMANバックアップを使用して、表および表パーティションを指定された時点までリカバリすることができます。

RMANバックアップからの表および表パーティションのリカバリは、次の場合に有用です。

  • ごく少数の表を特定の時点までリカバリする必要がある。この場合、TSPITRは、表領域内のすべてのオブジェクトを指定された時点まで戻すため、最適なソリューションでありません。

  • 論理的に破損したか、削除および消去された表をリカバリする必要がある。

  • 目的の時点が使用可能なUNDOより古いため、フラッシュバック表が使用できない。

  • DDL操作によって表の構造を変更した後に失われたデータをリカバリする必要がある。目的の時点と現行の時間の間の表でDDLが実行されたため、フラッシュバック表を使用できません。フラッシュバック表は、表の切捨て操作などの構造変更の時点以前に表を巻き戻すことはできません。

22.1.2 表および表パーティションのリカバリに必要なRMANバックアップ

表または表パーティションをリカバリするには、表または表パーティションを含むUNDO、SYSTEMSYSAUXおよび表領域の完全バックアップが必要です。

表をリカバリするには、表の従属オブジェクトを含むすべてのパーティションがリカバリ・セットに含まれている必要があります。表領域tbs1内の表の索引またはパーティションが表領域tbs2に含まれているとすると、リカバリ・セットに表領域tbs2も含まれる場合にのみ、その表のリカバリが可能になります。

PDB内の表をリカバリするには、次のバックアップが必要です。

  • ルート、CDBシード、および表が含まれるPDBのSYSTEMSYSAUXおよびUNDO表領域

  • 表またはパーティションが含まれる表領域

22.1.3 RMANバックアップからの表および表パーティションのリカバリの基本概念

RMANは、RECOVERコマンドを使用して、表または表パーティションを指定された時点までリカバリします。

表および表パーティションをRMANバックアップからリカバリするには、次の情報を指定する必要があります。

  • リカバリする必要がある表または表パーティションの名前

  • 表または表パーティションをリカバリする必要がある時点

  • リカバリされた表または表パーティションを、ターゲット・データベースにインポートする必要があるかどうか

RMANは、この情報を使用して、指定された表または表パーティションのリカバリ・プロセスを自動化します。RMANは、リカバリ・プロセスの一部として補助データベースを作成し、これは表または表パーティションを指定された時点までリカバリするために使用されます。

リカバリされた表または表パーティションが、名前の変更、新規表領域へのマッピングまたは新規スキーマへのマッピングを必要とする場合、表、表領域またはスキーマに新しい名前を指定する必要があります。

22.1.3.1 表および表パーティションをリカバリするためにRMANが実行するステップ

RMANバックアップから表または表パーティションをリカバリするプロセスを自動化する間、RMANは一連のステップを実行します。

次のステップがあります。

  1. リカバリに指定された時点に基づき、リカバリする必要がある表または表パーティションを含むバックアップはどれかを判断します。
  2. 表またはパーティションのリカバリ処理中に使用される補助インスタンスを作成するのに十分な領域がターゲット・ホストにあるかどうかを判断します。
    必要な領域が使用できない場合、RMANはエラーを表示して、リカバリ操作を終了します。
  3. ターゲット・ホストに補助データベースを作成し、指定された表または表パーティションを、指定された時点まで、この補助データベースにリカバリします。

    リカバリされたデータファイルが格納されるターゲット・ホストの補助データベース内の場所を指定できます。

  4. リカバリされた表または表パーティションを含むデータ・ポンプ・エクスポート・ダンプ・ファイルを作成します。

    リカバリされた表または表パーティションのメタデータを格納するために使用されるデータ・ポンプのエクスポート・ダンプ・ファイルの名前と場所を指定できます。

  5. (オプション)ターゲット・インスタンスにデータ・ポンプ・エクスポート・ダンプ・ファイルをインポートします。

    リカバリされた表または表パーティションを含むエクスポート・ダンプ・ファイルを、ターゲット・データベースにインポートしないように選択することができます。エクスポート・ダンプ・ファイルをリカバリ・プロセスの一環としてインポートしない場合は、データ・ポンプ・インポート・ユーティリティを使用し、後から手動でインポートする必要があります。

  6. (オプション)リカバリされた表または表パーティションの名前をターゲット・データベースで変更します。

    元の場所とは別の表領域またはスキーマにリカバリされたオブジェクトをインポートすることもできます。

22.1.3.2 RMAN表のリカバリ時の補助データベース・ファイルの格納場所について

RMANは、指定した表または表パーティションのリカバリ処理中に使用する補助データベースを作成します。補助データベース・ファイルの場所を指定するには、複数の方法があります。

補助データベースのデータファイルを格納するために使用されるターゲット・ホストで、次のいずれかの方法を使用します。

  • RECOVERコマンドのAUXILIARY DESTINATION

  • SET NEWNAMEコマンド

    RECOVERコマンドおよびデータファイルの名前を変更する必要なSET NEWNAMEを含むRUNブロックを使用します。

補助データベースのデータファイルの場所は、AUXILIARY DESTINATION句を使用して指定することをお薦めします。SET NEWNAMEコマンドを使用すると、リカバリ・プロセスに必要なデータファイルの名前を1つ省略しただけで、表または表パーティションをリカバリすることができません。

22.1.3.3 RMAN表のリカバリ時に使用されるデータ・ポンプ・エクスポート・ダンプ・ファイルについて

指定された時点まで表または表パーティションを補助データベースにリカバリした後、RMANは、リカバリされたオブジェクトを含むデータ・ポンプ・エクスポート・ダンプ・ファイルを作成します。このダンプ・ファイルの名前と場所を指定するか、またはRMANでデフォルトの名前と場所を使用することもできます。

データ・ポンプ・エクスポート・ダンプ・ファイルが作成される場所は、RECOVERコマンドのDATAPUMP DESTINATION句を使用して指定します。通常は、ダンプ・ファイルを格納するオペレーティング・システム・ディレクトリのパスにします。この句を省略すると、ダンプ・ファイルはAUXILIARY DESTINATIONパラメータで指定された場所に格納されます。AUXILIARY DESTINATIONを指定していない場合は、オペレーティング・システム固有のデフォルトの場所に格納されます。Linuxでは、このデフォルトの場所は$ORACLE_HOME/dbsです。Windowsでは、デフォルトの場所は%ORACLE_HOME\databaseです。

データ・ポンプ・エクスポート・ダンプ・ファイルの名前は、RECOVERコマンドのDUMP FILE句を使用して指定します。この句を省略すると、RMANはダンプ・ファイルにデフォルトのオペレーティング・システム特定の名前を使用します。LinuxおよびWindowsでは、デフォルトのダンプ・ファイル名はtspitr_SID-of-clone_n.dmpであり、SID-of-cloneは、リカバリを実行するためにRMANによって作成された補助データベースのOracle SIDで、nはランダムに生成された数字です。ダンプ・ファイルを作成する必要がある場所に、DUMP FILEで指定した名前のファイルがすでに存在する場合、リカバリ操作は失敗します。

22.1.3.4 リカバリされた表および表パーティションのターゲット・データベースへのインポートについて

デフォルトでは、RMANは、リカバリされた表または表パーティション(エクスポート・ダンプ・ファイルに格納される)をターゲット・データベースにインポートします。ただし、RESTOREコマンドのNOTABLEIMPORT句を使用すると、リカバリされた表または表パーティションをインポートしないように選択できます。

NOTABLEIMPORTを使用すると、RMANは指定された時点までリカバリし、そのエクスポート・ダンプ・ファイルを作成します。ただし、このダンプ・ファイルは、ターゲット・データベースにインポートされません。このダンプ・ファイルは、必要なときに、データ・ポンプ・インポート・ユーティリティを使用してターゲット・データベースへ手動でインポートする必要があります。

インポート操作中にエラーが発生すると、RMANは、表のリカバリの最後にエクスポート・ダンプ・ファイルを削除しません。これにより、ダンプ・ファイルを手動でインポートできます。

22.1.3.5 RMANのリカバリ時にリカバリされた表および表パーティションの名前変更について

REMAP TABLE句を使用すると、リカバリされた表または表パーティションの名前をターゲット・データベースで変更できます。

リカバリした表と同じ名前の表がターゲット・データベースに存在する場合は、REMAP TABLE句を使用してリカバリした表の名前を変更する必要があることを示すエラー・メッセージがRMANによって表示されます。

表パーティションをリカバリする場合、各表パーティションは別々の表にリカバリされます。REMAP TABLE句を使用して、リカバリされた各パーティションがインポートされる必要のある表の名前を指定します。表の名前を明示的に指定しない場合、RMANは、リカバリされた表の名前とパーティション名を連結して表の名前を生成します。名前は、tablename_partitionnameの書式で生成されます。この名前がターゲット・データベースに存在する場合は、RMANは、その名前に_1を追加します。この名前も存在する場合、RMANは、その名前に_2を追加します(以降同様)。

リカバリされた表または表パーティションをこれらのオブジェクトの元の場所とは別の表領域にインポートするには、RECOVERコマンドのREMAP TABLESPACE句を使用します。リカバリされる表または表パーティションのみが再マップされ、既存のオブジェクトは変更されません。

ノート:

REMAP TABLEオプションを使用した場合は、名前付きの制約および索引をインポートできません。

22.1.3.6 表およびパーティションの新規スキーマへのリカバリについて

表または表パーティションを別のスキーマにリカバリすると、すでにソース・スキーマに存在する制約、索引またはトリガーの名前で起こりうる名前の競合を避けることができます。

Oracle Database 12cリリース2 (12.2)以降、表または表パーティションをソース・スキーマ(元の場所のスキーマ)とは別のスキーマにリカバリできるようになりました。別のスキーマにオブジェクトをリカバリしている際に、元の名前を保持することも名前を変更することもできます。単一のリカバリ操作で、表の名前を変更してスキーマを再マップできます。たとえば、HR.EMPLOYEES表をNEW_HR.EMPLOYEES表、HR.NEW_EMPLOYEES表またはNEW_HR.NEW_EMPLOYEES表にリカバリできます。REMAP TABLE句によって、オブジェクトの名前を変更して別のスキーマにリカバリできます。

表リカバリ中に、RECOVER TABLEコマンドのREMAP TABLE句を使用して、ソース・スキーマを新規スキーマにマッピングします。新しいスキーマは、リカバリの実行前にターゲット・データベース内に存在する必要があります。

ノート:

表リカバリは、フィジカル・スタンバイ・データベースではサポートされていません。ロジカル・スタンバイ・データベースでは、プライマリ・データベースでリカバリされたオブジェクトはロジカル・スタンバイに伝播されます。

22.1.4 RMANバックアップからの表および表パーティションのリカバリの制限

RECOVERコマンドを使用してRMANバックアップから表および表パーティションをリカバリするには、特定の制限が適用されます。

次の制限があります。

  • SYSスキーマに属する表および表パーティションは、リカバリできません。

  • SYSTEM表領域およびSYSAUX表領域の表および表パーティションは、リカバリできません。

  • スタンバイ・データベース上の表および表パーティションは、リカバリできません。

  • NOT NULL制約を使用して命名された表は、REMAPオプションではリカバリできません。

22.2 表および表パーティションのリカバリの準備

表または表パーティションのリカバリを準備する前に、いくつかの予備タスクを実行する必要があります。

表または表パーティションをRMANバックアップからリカバリするための準備には、次のステップがあります。

  • 表または表パーティションをリカバリするために必要な前提条件を満たしていることの確認

  • 表または表パーティションをリカバリする必要がある時点の判断

  • リカバリされた表または表パーティションを、ターゲット・データベースにインポートする必要があるかどうかの判断

    デフォルトでは、RMANはリカバリされた表または表パーティションをターゲット・データベースにインポートします。ただし、リカバリされたオブジェクトを、RMANでインポートする必要がないことを指定することができます。

  • リカバリされた表または表パーティションが、名前を変更、新規表領域にマッピングまたは新規スキーマにマッピングする必要があるかを判断します。

22.2.1 RMANバックアップからの表および表パーティションのリカバリの前提条件

RMANバックアップから表または表パーティションをリカバリする前に、特定の前提条件を満たす必要があります。

これには次の機能が含まれます。

  • ターゲット・データベースは、読取り/書込みモードである必要があります。

  • ターゲット・データベースは、ARCHIVELOGモードである必要があります。

  • リカバリする必要がある時点の表または表パーティションが存在したときの、これらのRMANバックアップが必要です。

  • 単一の表パーティションをリカバリするには、ターゲット・データベースのCOMPATIBLE初期化パラメータに、11.1.0以上を設定しておく必要があります。

22.2.2 表または表パーティションをリカバリする必要がある時点の判断

表または表パーティションをリカバリする必要がある正確な時点を確認することは、重要です。オブジェクトをリカバリする必要がある時点を指定するには、複数の方法があります。

次のいずれかの方法を使用します。

  • SCN

    SCNによって指定された時点での表または表パーティションの状態に、これらをリカバリします。

  • 時刻

    指定された時刻での表または表パーティションの状態に、これらをリカバリします。環境変数NLS_LANGおよびNLS_DATE_FORMATで指定した日付書式を使用します。SYSDATEなどのデータ定数(たとえばSYSDATE-30)を使用して、時間を指定することもできます。

  • 順序番号

    ログ順序番号とスレッド数によって指定された時点での表または表パーティションの状態に、これらをリカバリします。

22.3 表および表パーティションのリカバリ

表または表パーティションをリカバリするには、RESTOREおよびRECOVERコマンドを使用します。

ノート:

表のリカバリは、ターゲット・データベースにローカルに接続している場合にのみサポートされます。

非CDBの表または表パーティションを指定された時点までリカバリするには:

  1. 「表および表パーティションのリカバリの準備」に記載された計画タスクを実行します。
  2. RMANを起動し、TARGETとしてターゲット・データベースに接続します。RMANによるデータベース接続の確立の説明に従って、SYSBACKUPまたはSYSDBA権限を持つユーザーとして接続する必要があります。
  3. RECOVER TABLEコマンドを使用して指定された時点まで、選択された表または表パーティションをリカバリします。AUXILIARY DESTINATION句と、リカバリする時点を指定するUNTIL TIMEUNTIL SCNまたはUNTIL SEQUENCEのいずれかの句を使用する必要があります。

    RECOVERコマンドに、次の句を追加して使用することができます。

22.4 PDBの表および表パーティションのリカバリ

RMANでは、RECOVERコマンドを使用してプラガブル・データベース(PDB)内の1つ以上の表または表パーティションを、そのPDB内の他のオブジェクトに影響することなく、指定された時点までリカバリできます。

ノート:

表のリカバリは、ターゲット・データベースにローカルに接続している場合にのみサポートされます。

PDBの表または表パーティションのリカバリに使用するステップは、非CDBで使用するものと同様ですが、この項で説明する相違点があります。

PDBの表または表パーティションをリカバリするには:

  1. 「表および表パーティションのリカバリの準備」に記載された計画タスクを実行します。
  2. RMANを開始し、CDBへのRMAN接続の確立の説明に従って、SYSDBAまたはSYSBACKUP権限を持つユーザーとしてrootに接続します。
  3. RECOVER TABLE ... OF PLUGGABLE DATABASEコマンドを使用して指定された時点まで、表または表パーティションをリカバリします。

    AUXILIARY DESTINATION句とUNITL TIMEUNTIL SCNまたはUNTIL SEQUENCEのいずれかの句を使用する必要があります。

    また、要件に応じて、DUMP FILEDATAPUMP DESTINATIONNOTABLEIMPORTREMAP TABLEまたはREMAP TABLESPACEの1つ以上の句を使用する必要がある場合があります。

    次のコマンドは、PDB HR_PDBの表PDB_EMPを、現在の日付から4日前の状態にリカバリします。HRは、表を含むスキーマの名前です。リカバリされた表の名前は、EMP_RECVRに変更されます。

    RECOVER TABLE HR.PDB_EMP OF PLUGGABLE DATABASE HR_PDB
    UNTIL TIME 'SYSDATE-4'
    AUXILIARY DESTINATION '/tmp/backups'
    REMAP TABLE 'HR'.'PDB_EMP':'EMP_RECVR';
    

22.5 例: RMANバックアップからの表および表パーティションのリカバリ

この項では、表および表パーティションをリカバリするための複数のシナリオについて説明している例を示します。

22.5.1 例: 指定された時点への表のリカバリ

この例は、SYSDATEを使用して表される指定された時点に複数の表をリカバリします。

2つの表EMPDEPTを、論理的破損が発生する前である、2日前の状態にリカバリするとします。ただし、これらの表をターゲット・データベースにインポートする際、RMANは使用しません。RMANは、エクスポート・ダンプ・ファイルemp_dept_exp_dump.datを、/tmp/recover/dumpfilesに作成するのみです。NOTABLEIMPORTの使用は、これらの表がターゲット・データベースにインポートされないことを意味します。これらの表は、データ・ポンプ・インポート・ユーティリティを使用して、必要に応じてインポートできます。リカバリ・プロセス中に使用される補助の宛先は、/tmp/oracle/recoverです。

EMPDEPTを、ターゲット・データベースにインポートせずにリカバリするには:

  1. 「表および表パーティションのリカバリの準備」に記載された計画タスクを実行します。

    この例では、SYSDATEを使用する式で指定された時点に、表をリカバリする必要があります。ただしリカバリされた表は、ターゲット・データベースにインポートしません。

  2. RMANセッションを開始し、「RMANによるデータベース接続の確立」の説明に従ってターゲット・データベースにTARGETとして接続します。
  3. RECOVERコマンドで、DATAPUMP DESTINATIONDUMP FILEREMAP TABLEおよびNOTABLEIMPORTの句を使用し、表EMPDEPTをリカバリします。

    次のRECOVERコマンドは、EMP表とDEPT表をリカバリします。

    RECOVER TABLE SCOTT.EMP, SCOTT.DEPT
        UNTIL TIME 'SYSDATE-1'
        AUXILIARY DESTINATION '/tmp/oracle/recover'
        DATAPUMP DESTINATION '/tmp/recover/dumpfiles'
        DUMP FILE 'emp_dept_exp_dump.dat'
        NOTABLEIMPORT;
    

関連項目:

指定された時点への表のリカバリに関するその他の例は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください

22.5.2 例: 指定されたログ順序番号への表パーティションのリカバリ

この例は、RMANバックアップを使用して複数の表パーティションをリカバリします。

この例では、スキーマshの表salesに、次のパーティションsales_1998sales_1999sales_2000およびsales_2001が含まれています。この表は、sales_ts表領域に格納されています。2つのパーティションsales_1998sales_1999を、REDOログ順序番号で指定された時点までリカバリする必要があります。リカバリされた表は、自動的にターゲット・データベースにインポートされる必要があり、表領域SALES_PRE_2000_TSにマップされる必要があります。

パーティションsales_1998およびsales_1999を指定されたログ順序番号までリカバリするには:

  1. 「表および表パーティションのリカバリの準備」に記載された計画タスクを実行します。

    この例では、2つの表パーティションを、指定されたログ順序番号までリカバリした後、これらのパーティションをターゲット・データベースにインポートする必要があります。

  2. RMANセッションを開始し、「RMANによるデータベース接続の確立」の説明に従ってターゲット・データベースにTARGETとして接続します。
  3. 次のRECOVERコマンドにREMAP TABLE句とREMAP TABLESPACE句を使用して、パーティションをリカバリします。
    RECOVER TABLE SH.SALES:SALES_1998, SH.SALES:SALES_1999
        UNTIL SEQUENCE 354
        AUXILIARY DESTINATION '/tmp/oracle/recover'
        REMAP TABLE 'SH'.'SALES':'SALES_1998':'HISTORIC_SALES_1998',
                  'SH'.'SALES':'SALES_1999':'HISTORIC_SALES_1999' 
        REMAP TABLESPACE 'SALES_TS':'SALES_PRE_2000_TS';
     

    この場合、指定された表パーティションhistoric_sales_1998historic_sales_1999は、別の表である、ターゲット・データベースのsales_pre_2000_ts表領域にインポートされます。REMAP TABLE句は、インポートされた表に使用される名前を指定します。リカバリ・プロセス中に使用される補助の宛先は、/tmp/oracle/recoverです。

    REMAP TABLE句を省略すると、RMANはインポートされた表にデフォルトの名前を使用します。名前は、元の表名とパーティション名の組合せです。

22.5.3 例: 新規スキーマへの表のリカバリ

この例は、ソース・スキーマとは別の新規スキーマに複数の表をリカバリします。

この例では、HR.DEPARTMENTS表およびSH.CHANNELS表を論理的な破損が起きる前の、1日前の状態にリカバリする必要があります。リカバリされた表はNEW_DEPARTMENTSおよびNEW_CHANNELSに名前を変更してEXAMPLEスキーマにインポートする必要があります。スキーマEXAMPLEは、この例が実行された時点で存在します。

REMAP TABLE句は、ソース・スキーマが新規ターゲット・スキーマにマッピングされる方法を示すために使用されています。リカバリ・プロセス中に使用される補助の格納先は、/tmp/auxdestです。

  1. 必要な計画タスクを実行して、RMANバックアップから表をリカバリします。この例では、SYSDATEを使用する式で指定された時点に、表をリカバリする必要があります。
  2. RMANセッションを開始し、「RMANによるデータベース接続の確立」の説明に従ってターゲット・データベースに接続します。
  3. HR.DEPARTMENTS表およびSH.CHANNELS表をリカバリして、それぞれNEW_DEPARTMENTSおよびNEW_CHANNELSに名前を変更し、EXAMPLEスキーマにインポートします。

    次のRECOVERコマンドは、必要な表リカバリを実行します。

    RECOVER TABLE HR.DEPARTMENTS, SH.CHANNELS
    UNTIL TIME 'SYSDATE – 1' 
    AUXILIARY DESTINATION '/tmp/auxdest'
    REMAP TABLE hr.departments:example.new_departments, sh.channels:example.new_channels;