プライマリ・コンテンツに移動
Oracle® Database 2日でデータベース管理者
12c リリース1 (12.1)
B71307-08
目次へ移動
目次
索引へ移動
索引

前
次

9.8.1.2 フラッシュバック表の操作の実行

この例では、hr.employees表およびその依存表を過去のある時点に巻き戻します。

フラッシュバック表の操作を実行するには、次の手順を実行します。

  1. RMANを使用したターゲット・データベースへの接続に説明されているとおりに、Oracle Recovery Manager (RMAN)をターゲット・データベースに接続します。
  2. フラッシュバック対象の表に、他の表への依存性があるかどうかを確認します。

    次のSQL問合せを使用すると、hr.employeesの依存性を確認できます。

    SELECT other.owner, other.table_name 
        FROM sys.all_constraints this, sys.all_constraints other
        WHERE this.owner = 'HR'
          AND this.table_name = 'EMPLOYEES'
          AND this.r_owner = other.owner
          AND this.r_constraint_name = other.constraint_name
          AND this.constraint_type='R';
    
    OWNER                          TABLE_NAME
    ------------------------------ ------------------------------
    HR                             EMPLOYEES
    HR                             JOBS
    HR                             DEPARTMENTS
    
  3. フラッシュバック対象の表とその依存表に対して、行の移動が有効になっていることを確認します。

    この例では、表における行の移動の有効化に記載されている手順を使用して、hr.employeeshr.jobsおよびhr.departmentsの各表に対して行の移動を有効化する必要があります。

  4. 表を戻す時刻、SCNまたはリストア・ポイントを識別します。

    この例では、5分前に行を誤って挿入したと想定しています。したがって、現在の時刻より5分前のタイムスタンプにロールバックする必要があります。

    注意:

    不要な変更がどの時点で行われたかが不明な場合、Oracle Flashback Version Queryを使用して、ターゲット表に対して最近行われたすべての変更を確認できます。この機能の使用方法については、このマニュアルでは説明しません。

  5. 指定した目標時点に表を巻戻すための十分なUNDOデータが存在していることを確認します。

    次の問合せを使用すると、UNDOデータが保持される期間を確認できます。

    SELECT NAME, VALUE/60 MINUTES_RETAINED 
        FROM V$PARAMETER
        WHERE NAME = 'undo_retention';
    
    NAME             MINUTES_RETAINED
    ---------------  ----------------
    undo_retention               15
    
  6. FLASHBACK TABLE文を使用して、必要な表に対してフラッシュバック操作を実行します。

    次のSQL文は、表hr.employeeshr.jobsおよびhr.departmentsを指定した時間に戻します。

    FLASHBACK TABLE hr.employees TO TIMESTAMP TO_TIMESTAMP('2012-03-27 09:30:00', 'YYYY-MM-DD HH:MI:SS');
    
    FLASHBACK TABLE hr.jobs TO TIMESTAMP TO_TIMESTAMP('2012-03-27 09:30:00', 'YYYY-MM-DD HH:MI:SS');
    
    FLASHBACK TABLE hr.departments TO TIMESTAMP TO_TIMESTAMP('2012-03-27 09:30:00', 'YYYY-MM-DD HH:MI:SS');