てぃぐれのプログラマwiki

ワクワクに従う

フラッシュバックとUNDO ORACLE

フラッシュバックドロップ

DROPしたテーブルを戻す

 ∟FLASHBACK TABLE <表名> TO BEFORE DROP;

 

仕様

DROPしたテーブルは同じ表領域で論理削除されているので、元に戻す

・索引も元に戻る

・PURGEオプションで DROPしている場合は元に戻すことはできない

CASCADEオプションをしていてもPURGEしていなければ元に戻すことができる

DROP処理はUNDO領域は関係ない

 

フラッシュバッククエリ

ある時点のデータを確認し(変更履歴)、それを元にDMLで元に戻す

 ∟ SELECT * from <表名>

   as of timestamp to_timestamp(systimestamp - interval '1' minute);

ある期間(ex.15分前までの)

 ∟ SELECT versions_xid, versions_starttime,versions_operation,tiga.*
          FROM <表名>
          VERSIONS

          BETWEEN TIMESTAMP (systimestamp - interval '15' minute ) AND systimestamp;

 

 

フラッシュバックテーブル

とある時点までのテーブルのデータに戻す

∟ FLASHBACK TABLE 表名 TO TIMESTAMP to_timestamp('2022-03-22 20:00:00','YYYY-MM-DD HH24:MI:SS');

 

UNDOの話

フラッシュバッククエリとフラッシュバックテーブルはUNDOデータに依存する。UNDO_RETENTIONはデフォルトで900秒(15分)なので、15分以内ならデータを元に戻せると考えて良い。しかし、それは目安であって確約されたものではない。

UNDO領域がいっぱいになれば、随時、上書きされているからである。

確約させるための設定もあるが、容量がいっぱいになった時にエラーが出るようになる。