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、SYSTEM
、SYSAUX
および表領域の完全バックアップが必要です。
表をリカバリするには、表の従属オブジェクトを含むすべてのパーティションがリカバリ・セットに含まれている必要があります。表領域tbs1
内の表の索引またはパーティションが表領域tbs2
に含まれているとすると、リカバリ・セットに表領域tbs2
も含まれる場合にのみ、その表のリカバリが可能になります。
PDB内の表をリカバリするには、次のバックアップが必要です。
-
ルート、CDBシード、および表が含まれるPDBの
SYSTEM
、SYSAUX
およびUNDO表領域 -
表またはパーティションが含まれる表領域
22.1.3 RMANバックアップからの表および表パーティションのリカバリの基本概念
RMANは、RECOVER
コマンドを使用して、表または表パーティションを指定された時点までリカバリします。
表および表パーティションをRMANバックアップからリカバリするには、次の情報を指定する必要があります。
-
リカバリする必要がある表または表パーティションの名前
-
表または表パーティションをリカバリする必要がある時点
-
リカバリされた表または表パーティションを、ターゲット・データベースにインポートする必要があるかどうか
RMANは、この情報を使用して、指定された表または表パーティションのリカバリ・プロセスを自動化します。RMANは、リカバリ・プロセスの一部として補助データベースを作成し、これは表または表パーティションを指定された時点までリカバリするために使用されます。
リカバリされた表または表パーティションが、名前の変更、新規表領域へのマッピングまたは新規スキーマへのマッピングを必要とする場合、表、表領域またはスキーマに新しい名前を指定する必要があります。
22.1.3.1 表および表パーティションをリカバリするためにRMANが実行するステップ
RMANバックアップから表または表パーティションをリカバリするプロセスを自動化する間、RMANは一連のステップを実行します。
次のステップがあります。
22.1.3.2 RMAN表のリカバリ時の補助データベース・ファイルの格納場所について
RMANは、指定した表または表パーティションのリカバリ処理中に使用する補助データベースを作成します。補助データベース・ファイルの場所を指定するには、複数の方法があります。
補助データベースのデータファイルを格納するために使用されるターゲット・ホストで、次のいずれかの方法を使用します。
-
RECOVER
コマンドのAUXILIARY DESTINATION
句 -
SET NEWNAME
コマンドRECOVER
コマンドおよびデータファイルの名前を変更する必要なSET NEWNAME
を含むRUN
ブロックを使用します。
関連項目:
-
Oracle Databaseバックアップおよびリカバリ・リファレンスの
RECOVER
コマンド構文 -
Oracle Databaseバックアップおよびリカバリ・リファレンスの
SET
コマンド構文
補助データベースのデータファイルの場所は、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 リカバリされた表および表パーティションの名前変更
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.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の表または表パーティションを指定された時点までリカバリするには:
22.4 PDBの表および表パーティションのリカバリ
RMANでは、RECOVER
コマンドを使用してプラガブル・データベース(PDB)内の1つ以上の表または表パーティションを、そのPDB内の他のオブジェクトに影響することなく、指定された時点までリカバリできます。
ノート:
表のリカバリは、ターゲット・データベースにローカルに接続している場合にのみサポートされます。PDBの表または表パーティションのリカバリに使用するステップは、非CDBで使用するものと同様ですが、この項で説明する相違点があります。
PDBの表または表パーティションをリカバリするには:
22.5 例: RMANバックアップからの表および表パーティションのリカバリ
この項では、表および表パーティションをリカバリするための複数のシナリオについて説明している例を示します。
22.5.1 例: 指定された時点への表のリカバリ
この例は、SYSDATE
を使用して表される指定された時点に複数の表をリカバリします。
2つの表EMP
とDEPT
を、論理的破損が発生する前である、2日前の状態にリカバリするとします。ただし、これらの表をターゲット・データベースにインポートする際、RMANは使用しません。RMANは、エクスポート・ダンプ・ファイルemp_dept_exp_dump.dat
を、/tmp/recover/dumpfiles
に作成するのみです。NOTABLEIMPORT
の使用は、これらの表がターゲット・データベースにインポートされないことを意味します。これらの表は、データ・ポンプ・インポート・ユーティリティを使用して、必要に応じてインポートできます。リカバリ・プロセス中に使用される補助の宛先は、/tmp/oracle/recover
です。
表EMP
とDEPT
を、ターゲット・データベースにインポートせずにリカバリするには:
関連項目:
指定された時点への表のリカバリに関するその他の例は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください
22.5.2 例: 指定されたログ順序番号への表パーティションのリカバリ
この例は、RMANバックアップを使用して複数の表パーティションをリカバリします。
この例では、スキーマ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
を指定されたログ順序番号までリカバリするには:
22.5.3 例: 新規スキーマへの表のリカバリ
この例は、ソース・スキーマとは別の新規スキーマに複数の表をリカバリします。
この例では、HR.DEPARTMENTS
表およびSH.CHANNELS
表を論理的な破損が起きる前の、1日前の状態にリカバリする必要があります。リカバリされた表はNEW_DEPARTMENTS
およびNEW_CHANNELS
に名前を変更してEXAMPLE
スキーマにインポートする必要があります。スキーマEXAMPLE
は、この例が実行された時点で存在します。
REMAP TABLE
句は、ソース・スキーマが新規ターゲット・スキーマにマッピングされる方法を示すために使用されています。リカバリ・プロセス中に使用される補助の格納先は、/tmp/auxdest
です。