フラッシュバックの使い方

消した表・変えた行を取り戻す(Oracle)

書き方

SHOW RECYCLEBIN
SELECT original_name, object_name, droptime FROM dba_recyclebin;
FLASHBACK TABLE 表 TO BEFORE DROP [RENAME TO 新しい名前];
PURGE TABLE 表;  PURGE RECYCLEBIN;
ALTER TABLE 表 ENABLE ROW MOVEMENT;
FLASHBACK TABLE 表 TO TIMESTAMP SYSTIMESTAMP - INTERVAL '10' MINUTE;
SELECT * FROM 表 AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '10' MINUTE;
SELECT * FROM 表 AS OF SCN 2471300;

DROP TABLE した表は、すぐには消えずにごみ箱(RECYCLEBIN)に BIN$ で始まる名前で入ります。FLASHBACK TABLE … TO BEFORE DROP で戻せますが、DROP TABLE … PURGE や PURGE で消したものは戻せません。同じ名前の表がもうあれば ORA-38312 になるので RENAME TO で別の名前にします(索引は BIN$ の名前のまま戻るので、ALTER INDEX … RENAME TO で直します)。COMMIT 済みの変更は、UNDO が残っている間(UNDO_RETENTION の秒数が目安)なら AS OF で過去の行を読めます。古すぎると ORA-01555。表ごと過去に戻す FLASHBACK TABLE … TO TIMESTAMP には ENABLE ROW MOVEMENT が要ります(ないと ORA-08189)。

例

FLASHBACK TABLE orders TO BEFORE DROP;
INSERT INTO orders SELECT * FROM orders AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '10' MINUTE WHERE order_id = 7;

実際に打って練習する

Oracle DBA コースの Lv52「消えた表を取り戻す FLASHBACK」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

Oracle Database の管理コマンド一覧(DBA)へ戻る