この章では、表および表パーティションを指定された時点までリカバリする方法について説明します。この章の内容は次のとおりです。
この項では、RMANバックアップから表および表パーティションをリカバリする目的と基本概念について説明します。
注意:
指定された時点まで表をリカバリする方法は、OracleフラッシュバックおよびTSPITRなど、他にもあります。これらの方法が有用な状況およびこれらの方法を使用して表をリカバリする方法の詳細は、次を参照してください。
RMANでは、1つまたは複数の表または表パーティションを、他のデータベース・オブジェクトに影響することなく、指定された時点までリカバリすることができます。以前作成されたRMANバックアップを使用して、表および表パーティションを指定された時点までリカバリすることができます。
RMANバックアップからの表および表パーティションのリカバリは、次の場合に有用です。
ごく少数の表を特定の時点までリカバリする必要がある。この場合、TSPITRは、表領域内のすべてのオブジェクトを指定された時点まで戻すため、最適なソリューションでありません。
論理的に破損したか、削除および消去された表をリカバリする必要がある。
目的の時点が使用可能なUNDOより古いため、フラッシュバック表が使用できない。
DDL操作によって表の構造を変更した後に失われたデータをリカバリする必要がある。目的の時点と現行の時間の間の表でDDLが実行されたため、フラッシュバック表を使用できません。フラッシュバック表は、表の切捨て操作などの構造変更の時点以前に表を巻き戻すことはできません。
表または表パーティションのリカバリには、その表または表パーティションを含むUNDO、SYSTEM、SYSAUXおよび表領域の完全バックアップが必要になります。
表をリカバリするには、表の従属オブジェクトを含むすべてのパーティションがリカバリ・セットに含まれている必要があります。表領域tbs1内の表の索引またはパーティションが表領域tbs2に含まれているとすると、リカバリ・セットに表領域tbs2も含まれる場合にのみ、その表のリカバリが可能になります。表をリカバリするには、表の従属オブジェクトを含むすべてのパーティションがリカバリ・セットに含まれている必要があります。
PDB内の表をリカバリするには、次に示すバックアップが必要になります。
ルートのSYSTEM、SYSAUXおよびUNDO表領域
表または表パーティションが含まれているシード・データベース(PDB$SEED)とPDBのSYSTEM表領域とSYSAUX表領域
表またはパーティションが含まれている表領域
RMANは、RECOVERコマンドを使用して、表または表パーティションを指定された時点までリカバリします。
表および表パーティションをRMANバックアップからリカバリするには、次の情報を指定する必要があります。
リカバリする必要がある表または表パーティションの名前
表または表パーティションをリカバリする必要がある時点
リカバリされた表または表パーティションを、ターゲット・データベースにインポートする必要があるかどうか
RMANは、この情報を使用して、指定された表または表パーティションのリカバリ・プロセスを自動化します。RMANは、リカバリ・プロセスの一部として補助データベースを作成し、これは表または表パーティションを指定された時点までリカバリするために使用されます。
リカバリ・プロセスを自動化するためにRMANで使用される手順については、「表および表パーティションをリカバリするためにRMANが実行する手順」を参照してください。
指定された表または表パーティションをリカバリするために、RMANではリカバリ・プロセス中に使用する補助データベースを作成します。次のいずれかの方法を使用して、補助データベースのデータファイルの格納に使用する、ターゲット・ホスト上の場所を指定します。
RECOVERコマンドのAUXILIARY DESTINATION句
SET NEWNAMEコマンド
RECOVERコマンドおよびデータファイルの名前を変更する必要なSET NEWNAMEを含むRUNブロックを使用します。
関連項目:
これらのコマンドおよび句の詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。
補助データベースのデータファイルの場所は、AUXILIARY DESTINATION句を使用して指定することをお薦めします。SET NEWNAMEコマンドを使用すると、リカバリ・プロセスに必要なデータファイルの名前を1つ省略しただけで、表または表パーティションをリカバリすることができません。
指定された時点まで表または表パーティションを補助データベースにリカバリした後、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で指定した名前のファイルがすでに存在する場合、リカバリ操作は失敗します。
デフォルトでは、RMANは、リカバリされた表または表パーティション(エクスポート・ダンプ・ファイルに格納される)をターゲット・データベースにインポートします。ただし、RESTOREコマンドのNOTABLEIMPORT句を使用すると、リカバリされた表または表パーティションをインポートしないように選択できます。
NOTABLEIMPORTを使用すると、RMANは指定された時点までリカバリし、そのエクスポート・ダンプ・ファイルを作成します。ただし、このダンプ・ファイルは、ターゲット・データベースにインポートされません。このダンプ・ファイルは、必要なときに、データ・ポンプ・インポート・ユーティリティを使用してターゲット・データベースへ手動でインポートする必要があります。
インポート操作中にエラーが発生すると、RMANは、表のリカバリの最後にエクスポート・ダンプ・ファイルを削除しません。これにより、ダンプ・ファイルを手動でインポートできます。
表または表パーティションをリカバリする場合、ターゲット・データベースへのインポート後にリカバリされたオブジェクトの名前を変更できます。REMAP TABLE句を使用すると、リカバリされた表または表パーティションの名前をターゲット・データベースで変更できます。リカバリされた表または表パーティションをこれらのオブジェクトの元の場所とは別の表領域にインポートするには、RECOVERコマンドのREMAP TABLESPACE句を使用します。リカバリされる表または表パーティションのみが再マップされ、既存のオブジェクトは変更されません。
リカバリした表と同じ名前の表がターゲット・データベースに存在する場合は、REMAP TABLE句を使用してリカバリした表の名前を変更する必要があることを示すエラー・メッセージがRMANによって表示されます。
表パーティションをリカバリする場合、各表パーティションは別々の表にリカバリされます。REMAP TABLE句を使用して、リカバリされた各パーティションがインポートされる必要のある表の名前を指定します。表の名前を明示的に指定しない場合、RMANは、リカバリされた表の名前とパーティション名を連結して表の名前を生成します。名前は、tablename_partitionnameの書式で生成されます。この名前がターゲット・データベースに存在する場合は、RMANは、その名前に_1を追加します。この名前も存在する場合、RMANは、その名前に_2を追加します(以降同様)。
注意:
REMAPオプションを使用すると、名前付きの制約および索引はインポートされません。これは既存の表と名前が競合するのを避けるためです。
表または表パーティションをRMANバックアップからリカバリするための準備には、次の手順があります。
表または表パーティションをリカバリするために必要な前提条件を満たしていることの確認
表または表パーティションをリカバリする必要がある時点の判断
リカバリされた表または表パーティションを、ターゲット・データベースにインポートする必要があるかどうかの判断
デフォルトでは、RMANはリカバリされた表または表パーティションをターゲット・データベースにインポートします。ただし、リカバリされたオブジェクトを、RMANでインポートする必要がないことを指定することができます。
これらに加え、「RMANバックアップからの表および表パーティションのリカバリの制限」に記載された制限を確認します。
ターゲット・データベースは、読取り/書込みモードである必要があります。
ターゲット・データベースは、ARCHIVELOGモードである必要があります。
リカバリする必要がある時点の表または表パーティションが存在したときの、これらのRMANバックアップが必要です。
単一の表パーティションをリカバリするには、ターゲット・データベースのCOMPATIBLE初期化パラメータに、11.1.0以上を設定しておく必要があります。
表または表パーティションをリカバリする必要がある正確な時点を確認することは、非常に重要です。RMANは、次のいずれかを使用して、必要な時点を指定することができます。
SCN
SCNによって指定された時点での表または表パーティションの状態に、これらをリカバリします。
時刻
指定された時刻での表または表パーティションの状態に、これらをリカバリします。環境変数NLS_LANGおよびNLS_DATE_FORMATで指定した日付書式を使用します。SYSDATEなどのデータ定数(たとえばSYSDATE-30)を使用して、時間を指定することもできます。
順序番号
ログ順序番号とスレッド数によって指定された時点での表または表パーティションの状態に、これらをリカバリします。
この項では、非CDBの表または表パーティションを指定された時点までリカバリするために必要な手順について説明します。
表または表パーティションを指定された時点までリカバリする手順
関連項目:
表および表パーティションのリカバリの例は、次を参照してください。
表および表パーティションのリカバリに関するより多くの例は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。
RMANでは、プラガブル・データベース(PDB)内の1つまたは複数の表または表パーティションを、そのPDB内の他のデータベース・オブジェクトに影響することなく、指定された時点までリカバリできます。PDBの表または表パーティションのリカバリに使用する手順は、非CDBで使用するものと同様ですが、この項で説明する相違点があります。
PDBの表または表パーティションをリカバリする手順
この項では、RMANバックアップを使用して、表および表パーティションを指定された時点までリカバリする方法に関する次の例を示します。
この例では、2つの表EMPとDEPTを、論理的破損が発生する前である、2日前の状態にリカバリするとします。ただし、これらの表をターゲット・データベースにインポートする際、RMANは使用しません。RMANは、エクスポート・ダンプ・ファイルemp_dept_exp_dump.datを、/tmp/recover/dumpfilesに作成するのみです。NOTABLEIMPORTの使用は、これらの表がターゲット・データベースにインポートされないことを意味します。これらの表は、データ・ポンプ・インポート・ユーティリティを使用して、必要に応じてインポートできます。リカバリ・プロセス中に使用される補助の宛先は、/tmp/oracle/recoverです。
表EMPとDEPTを、ターゲット・データベースにインポートせずにリカバリするには、次の手順を実行します。
関連項目:
指定された時点への表のリカバリに関するその他の例は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。
この例では、スキーマshの表salesに、次のパーティションsales_1998、sales_1999、sales_2000およびsales_2001が含まれています。この表は、sales_ts表領域に格納されています。2つのパーティションsales_1998とsales_1999を、REDOログ順序番号で指定された時点までリカバリする必要があります。リカバリされた表は、自動的にターゲット・データベースにインポートされる必要があり、表領域SALES_PRE_2000_TSにマップされる必要があります。
パーティションsales_1998およびsales_1999を指定されたログ順序番号までリカバリする手順