現在地

Recovery Manager(RMAN)表単位リカバリ

今号では、Oracle Database 12c からの Recovery Manager(RMAN) の新機能である表単位リカバリをご紹介します。是非ご一読ください。

表単位リカバリ機能

表単位リカバリ機能では、RMAN で取得したバックアップから特定の表のみを選択して過去のある一時点の状態へリカバリするということができます。これまでのリリースでも指定された時点まで表をリカバリするという機能は存在していました。フラッシュバック・テクノロジによる回復や、表領域単位の Point-in-time リカバリ(TSPITR) がこれに該当しています。これらの方法は Database 12c でも依然有効な機能ですが、適用可能な条件や期間が限られていたり、少数の表のみを扱いたいときには不都合な点がありました。

表単位リカバリでは以下の動作が自動的に実行されます。

  1. RMAN はバックアップを使用して補助データベースを作成します。
    補助データベースは、リカバリのために作成されるターゲット・データベースの最小限のクローンです。
  2. 補助データベースを指定された時点までリカバリします。
  3. 補助データベースからリカバリ対象の表をエクスポート(Data Pump)します。
  4. ターゲット・データベースにダンプ・ファイルをインポートします。
  5. 補助データベースを削除します。

表単位リカバリでは事前に準備が必要な要件は少なく、ARCHIVELOG モードであり、指定の時点にリカバリ可能なバックアップが取得されていれば十分です。また、ターゲット・データベース上で行われるのはインポート操作のみであるため、実運用への影響は最小限です。

例えば、 SH スキーマの CUSTOMERS 表をSCN 1899208 の時点までの状態でCUSTOMERS_RECOVERED という名称に変更という条件でリカバリを行う場合、コマンドとしては次のようになります。

RMAN> RECOVER TABLE SH.CUSTOMERS
UNTIL SCN 1899208
AUXILIARY DESTINATION '/tmp/oracle/recover'
REMAP TABLE 'SH'.'CUSTOMERS':'CUSTOMERS_RECOVERED' ;

コマンド実行後、表単位リカバリの各操作が、補助データベースの作成からエクスポート・インポートまで RMAN により自動的に実行されていきます。

オプションとして以下の指定も可能です。

補助データベースの作成場所
AUXILIARY DESTINATION 句でディレクトリを指定できます。
リカバリ時点の指定方法
通常のリカバリと同じように UNTIL 句で 時刻、SCN、ログ# を指定できます。
インポートを行わない
NOTABLEIMPORT 句を指定してダンプファイルの生成のみにすることで、抽出データを他のデータベースへ移動させることもできます。
リカバリする表や格納先表領域を別の名称に変更する
REMAP TABLE 句、REMAP TABLESPACE 句 で Data Pump と同様に名称変更できます。 リカバリする表と同名の表が既に存在する場合(元の表がそのまま残っているような場合で REMAP 句を指定しない場合) は、コマンド実行直後に以下のようなエラー・メッセージが表示されます。この場合は REMAP 句を指定するか、既存の表の削除を検討してください。
RMAN-00571: =======================================================
RMAN-00569: ============= ERROR MESSAGE STACK FOLLOWS =============
RMAN-00571: =======================================================
RMAN-03002: recoverコマンドが02/26/2014 10:33:49で失敗しました
RMAN-05063: 指定された表をリカバリできません
RMAN-05112: 表"SH"."CUSTOMERS"はすでに存在します

まとめ

表単位リカバリは他の Point-in-time リカバリ方法と比較して気軽に実施でき、事前に必要な準備が少ないという点でメリットがあります。適用できる場面は限られますが論理バックアップが取得できていなかった場合の代替としても使用することができます。

(オラクル事業部 技術担当サポートセンターG 河崎)