RMANでの表単位のリカバリを検証します。
実施したときの備忘録です。

以下のURLを参考にしています。
https://docs.oracle.com/cd/E49329_01/backup.121/b71297/rcmresind.htm

まずは、対象となる表の確認

select * from test;

 

ID  TEXT

-- -----

1    aaa

2    bbb

3    ccc

まずはバックアップ

rman target /

backup database;

 

次に表を更新

insert into test values(4,'ddd');

commit;

 

さて、いよいよ表単位のリカバリになるのだが、注意点として、リカバリ・プロセス中に補助データベースを作成するので、その領域が必要になる。
・・・実運用にのせるためには、この領域設計が必要になる。
 

補助データベースのデータファイル格納の指定は、以下のように記載
RECOVERコマンドのAUXILIARY DESTINATION
今回は、5Gほどあったのでtmp領域にする。
※推奨は、AUXILIARY DESTINATIONなので、こっちで指定することにする。

以下のコマンドでリカバリ

recover table test01.test

until time "to_date('先ほどdateで取得した時間','YYYY-MM-DD HH24:MI:SS')

auxiliary destination '/tmp'

datapump destination 'tmp';

 

※ここでnotableimportを指定しておくと、export したダンプファイルをインポートしない。

 

実行するとエラー

RMAN-05112

調べてみると、どうやらtestテーブルがあるとこのエラーになるらしい。

remapとかもあるんだが、詳細な部分はこれからやるとして単純にtableをdropしてから表を戻す方法をとる。

 

sqlplus test01/test01

drop table;

 

気を取り直しもう一度実行

recover table test01.test

until time "to_date('先ほどdateで取得した時間','YYYY-MM-DD HH24:MI:SS')

auxiliary destination '/tmp'

datapump destination 'tmp';

 

今度は成功

 

ログを見ていて思ったこと。

最初に初期パラの設定をしているがsga_targetがリストア元と同一なこと。

 ※これは考慮しなければいけない部分

リストアする用に補助DBを作成するのだが、こちらも同様に領域設計が必要となる。

 データファイルは必要最小限ぽいので、expdp時にリストアしていない表領域がないとエラー出力される(エラーは無視してexpdp、impdpが行われる)

impdpは正常終了する。

最後、使用したデータファイル、ダンプファイル、制御ファイルは削除される。