フラッシュバック(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: テーブルに行移動が使用可能ではないため、フラッシュバックできません
このエラーを解消し、目的を達成するために必要な操作として正しいものを選べ。
- A
ALTER TABLE hr.emp ENABLE ROW MOVEMENT;を実行してから再度FLASHBACK TABLE ... TO TIMESTAMPを実行する - B
ALTER TABLE hr.emp ENABLE FLASHBACK;を実行してから再実行する - Cデータベースを
FLASHBACK DATABASE可能にするためALTER DATABASE FLASHBACK ON;を実行する - D表を
DROPしてFLASHBACK TABLE hr.emp TO BEFORE DROP;で戻す
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:A✓Gold監修
解説
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 を再実行すればよい。
- B
ENABLE FLASHBACKという構文のALTER TABLE句は存在しない(表レベルで必要なのはROW MOVEMENT)。 - C
ALTER DATABASE FLASHBACK ONは Flashback Database(DB 全体を巻き戻す=フラッシュバックログ/FRA が必要)の前提であって、本件のFLASHBACK TABLE ... TO TIMESTAMP(UNDO ベース)には不要。別機能を混同している。 - D
TO BEFORE DROPは「DROP した表」をリサイクルビンから復元する機能。本件は表を消したいのではなくUPDATEを戻したいので、わざわざ DROP するのは誤り(データも壊す)。
ひっかけ: 3種のフラッシュバックの混同。
Flashback Table(TO TIMESTAMP/SCN)=UNDO+row movement/
Flashback Drop(TO BEFORE DROP)=リサイクルビン/
Flashback Database=フラッシュバックログ/FRA・DB全体。それぞれ前提(UNDO / recyclebin / flashback logs)が違う。
公式ドキュメント・関連Development Guide ― Using Oracle Flashback Technology(FLASHBACK TABLE と ENABLE ROW MOVEMENT)↗
✓Gold 保有者による書き下ろし解説・実機で検証済