例: 指定したPoint-in-Timeへのデータベース全体のリカバリ

この例では、保護されたデータベースのPoint-in-Timeリカバリ(PITR)を実行する方法を示します。PITRは、保護されたデータベースを以前の日付に戻して、ユーザー・エラー(表の誤削除、間違った表の更新など)、メディア障害、またはデータベースのアップグレードの失敗からリカバリする場合に必要になることがあります。制御ファイルをリストアする必要があるのは、制御ファイルに構成変更(表領域の作成や削除など)があった場合のみです。SET UNTIL句を使用して、保護されたデータベースをリカバリする必要のある目的の時間、SCN、またはログ順序を指定します。

保護されたデータベースでフラッシュバック・データベースが有効になっている場合は、この機能を使用して以前のPoint-in-Timeにリカバリすることもできます。

関連項目:

  • Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド

  • Oracle Database Recovery Managerリファレンス

保護されたデータベース全体(制御ファイルを含む)を特定のPoint-in-Timeにリストアおよびリカバリするには:

  1. 「リカバリ・アプライアンスからデータをリストアおよびリカバリするための前提条件」で説明している前提条件を満たしていることを確認します。
  2. RMANを使用して、保護されたデータベースにはTARGETとして、リカバリ・アプライアンス・カタログにはCATALOGとして接続します。
  3. 保護されたデータベースをリカバリする必要のある目的のPoint-in-Timeを指定します。Point-in-TimeにはSCN、時間、またはログ順序番号を指定できます。

    次の問合せを使用して、タイムスタンプとSCN間の変換を行います。

    SQL> set linesize 222
    SQL> select name, current_scn, scn_to_timestamp(current_scn) "Time" 
         from v$database;
    
    NAME        CURRENT_SCN   TIME
    ---------   -----------   ------------------------------------
    ORA121      122019556     22-APR-14 12.30.15.000000000 PM
    

    保護されたデータベースを使用できない場合は、リカバリ・アプライアンス・カタログのビューを問い合せて、SCN番号を取得します。リカバリ・ウィンドウの範囲の日時、および保護されたデータベースのdb_unique_nameを入力する必要があります。リカバリ・アプライアンス・カタログに接続されている状態で、次の問合せを実行します(サンプル出力もあわせて表示)。

    SELECT a.db_key,
    a.db_name,
    a.sequence#,
    a.first_change#,
    a.next_change#,
    a.completion_time
    FROM rc_archived_log a, db b
    WHERE b.reg_db_unique_name = 'PTDB2' AND a.db_key = db.db_key 
        AND to_date('16-Jul-2014 06:55:23','DD-Mon-YYYY HH24:MI:SS') BETWEEN       
              a.first_time AND a.next_time;
    
    DB_KEY DB_NAME   SEQUENCE# FIRST_CHANGE# NEXT_CHANGE#   COMPLETION_TIME
    ------ -------- ---------- ------------- ------------   ---------------
    24201  PTDB2      9911      288402086    288430116     14/07/2014 5:27:49 PM
    

    FIRST_CHANGE#は、アーカイブREDOログ内の最初のSCN番号です。NEXT_CHANGE#は、このスレッド内の次のアーカイブREDOログの最初のSCNです。

  4. 制御ファイルと保護されたデータベースをリストアおよびリカバリします。
    STARTUP NOMOUNT;
    RUN 
    {
       SET UNTIL TIME "TO_DATE('2014-14-07:17:27:49','yyyy-dd-mm:hh24:mi:ss')";
       RESTORE CONTROLFILE;
       ALTER DATABASE MOUNT;
       RESTORE DATABASE;
       RECOVER DATABASE;
       ALTER DATABASE OPEN RESETLOGS;
    }