web-dev-qa-db-ja.com

set until timeを使用してRMANクローンリフレッシュを使用するにはどうすればよいですか?

私はこのテクニックを使用して開発を更新しています。本番データのある環境。

ビジネスプロセスは、開発するクローンの更新に使用する完全バックアップのテープホールドを要求することです。これがインポートされると、データベースのバックアップの正確なサーバー終了時刻(ログのバックアップではなく)を、設定するまでの時間の句に使用します。

run {
set until time = "TO_DATE('08/09/2014 20:24:47','MM/DD/YYYY HH24:MI:SS')" ;
allocate auxiliary channel t1 type 'sbt_tape';
duplicate target database to DEVDB;
}

これは一部の時間にのみ機能します。多くの場合、スクリプトは、テープホールドにない以前のバックアップを探します。

必要なメディア
検出された基準:メディア処理が必要
ジョブID:ステータス:メディアがライブラリにありません
ライブラリ名:SEA-TAPELIB07(i500 B)
メディアラベル:SVL432L4
失敗の理由:ジョブ[2518965]に必要なメディア[SVL432L4]がライブラリ[TAPELIB(9999)]にありません。インポート機能を使用して、メディアを[使用不可]の場所からライブラリ[TAPELIB(9999)]にインポートしてください。
メディアリスト:該当なし

回避策として、以前のバックアップを要求して、スクリプトを再実行しました。完了しましたが、前日のバックアップを使用し、リクエストは2日遅れて実行されました。この手法の何が問題になっていますか、または別の方法を使用する必要がありますか?どんな提案も参考になります。

1
Jason Brown

最初に、バックアップがライブラリにあることを確認する必要があります(確かにそれを見つけるためのより良い方法を知っているので、クエリを実行します)。

select
    D.DB_NAME, B.DB_ID, BASET.BCK_TYPE,
decode(BASET.CONTROLFILE_INCLUDED,'BACKUP','YES','NO') as CONTROLFILE_INCLUDED,
BASET.INCR_LEVEL, bapiece.tag, bapiece.handle, bapiece.start_time,
bapiece.completion_time,
round(bapiece.bytes/1024/1024,2) as Mb
from rman.bp bapiece,
        rman.dbinc d,
        rman.bs baset,
        rman.db b
where BAPIECE.DB_KEY=D.DB_KEY
   and D.DB_NAME='SFPROD'
   and BASET.DB_KEY=D.DB_KEY
   and BASET.BS_KEY = BAPIECE.BS_KEY
   and  bapiece.start_time>sysdate-1
   and B.DB_KEY=D.DB_KEY
---   and bapiece.handle like '%.dbf%'
order by tag desc, handle desc    ; 

そして...データベースを復元/複製するために「時間まで設定」を使用するのは嫌いです。より人間に優しいですが、復元の最後にrmanエラーが発生することに驚かれる可能性があります。複製プロセスの最後のコミット(SCN)を見つけてみてください。

SQL> select max(next_change#)
    from v$archived_log
    where archived = 'YES'
    group by thread#;

またはrmanで:

RMAN> list backup of archivelog all;
--Next SCN

その後:

run { set until scn ... ; allocate auxiliary channel t1 type 'sbt_tape'; duplicate target database to DEVDB; }
1
aitor