対策する資格
Java Silver ・ 近日ORACLE Silver ・ 近日
Gold 保有者 監修1Z0-083 対応
フラッシュバック(Flashback Table)難易度 標準無料

誤った UPDATE を 10 分前のコミット前状態に戻したい。UNDO は十分残っており、現在は OPEN 状態。次を実行した。

SQL> FLASHBACK TABLE hr.emp
  2    TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
FLASHBACK TABLE hr.emp
*
ERROR at line 1:
ORA-08189: テーブルに行移動が使用可能ではないため、フラッシュバックできません

このエラーを解消し、目的を達成するために必要な操作として正しいものを選べ。

  1. AALTER TABLE hr.emp ENABLE ROW MOVEMENT; を実行してから再度 FLASHBACK TABLE ... TO TIMESTAMP を実行する
  2. BALTER TABLE hr.emp ENABLE FLASHBACK; を実行してから再実行する
  3. Cデータベースを FLASHBACK DATABASE 可能にするため ALTER DATABASE FLASHBACK ON; を実行する
  4. D表を DROP して FLASHBACK TABLE hr.emp TO BEFORE DROP; で戻す
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AGold監修

解説

FLASHBACK TABLE ... TO TIMESTAMP / TO SCN は、UNDO データを使って表の内容を過去の時点へ巻き戻す機能である。 この処理は内部的に行の rowid が変わり得る(行の再配置を伴う)ため、対象表で行移動(row movement)が有効になっている必要がある。

無効のまま実行すると ORA-08189(row movement is not enabled)になる。 したがって ALTER TABLE hr.emp ENABLE ROW MOVEMENT; を実行してから FLASHBACK TABLE ... TO TIMESTAMP を再実行すればよい。

各誤答が違う理由
  • BENABLE FLASHBACK という構文の ALTER TABLE 句は存在しない(表レベルで必要なのは ROW MOVEMENT)。
  • CALTER DATABASE FLASHBACK ONFlashback Database(DB 全体を巻き戻す=フラッシュバックログ/FRA が必要)の前提であって、本件の FLASHBACK TABLE ... TO TIMESTAMP(UNDO ベース)には不要。別機能を混同している。
  • DTO BEFORE DROP は「DROP した表」をリサイクルビンから復元する機能。本件は表を消したいのではなく UPDATE を戻したいので、わざわざ DROP するのは誤り(データも壊す)。
ひっかけ: 3種のフラッシュバックの混同。 Flashback Table(TO TIMESTAMP/SCN)=UNDO+row movementFlashback Drop(TO BEFORE DROP)=リサイクルビンFlashback Database=フラッシュバックログ/FRA・DB全体。それぞれ前提(UNDO / recyclebin / flashback logs)が違う。
Gold 保有者による書き下ろし解説・実機で検証済
この分野をもっと解いて、得点源に
フラッシュバック を含む全問を分野別に演習できます(無料)。
演習する →