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は正常終了する。
最後、使用したデータファイル、ダンプファイル、制御ファイルは削除される。