[Oracle] 間違えて消したデータを復活させる [オラクル]


やりたいこと

間違えて削除したデータを元に戻したい。復活させたい。

DELETE文でデータを消してしまった場合は、COMMITした後でも元に戻せる可能性があります。
この記事で紹介します。

TRUNCATE文で消してしまった場合は、残念ながらバックアップから戻す必要があります。
またDROP TABLE文で削除したテーブルを元に戻す方法は別の記事で紹介しています。

仕組みの話

OracleのFLASHBACK機能を使用します。
FLASHBACK機能では、UNDO表領域のデータを使用して過去のデータを参照できます。
つまり元に戻すためのデータがUNDO表領域に残っていれば元に戻せるということです。
誤った操作をしてしまったらすぐに対処しましょう。

削除したデータを元に戻す

間違えてDELETE文を実行した日時(時分秒まで)が分かると話が早いです。
元に戻す際は、何時何分何秒のデータにしたいかを指定します。

-- もとに戻したいデータがあるか確認
-- 2022/03/09 10:00:00の箇所はデータが存在したであろう日時を指定してください。
-- WHERE句でテーブル目的のデータを指定してください。
SELECT * FROM <テーブル名> AS OF TIMESTAMP
 TO_TIMESTAMP('2022/03/09 10:00:00','YYYY/MM/DD HH24:MI:SS')
WHERE <条件>;

過去のデータが存在することが確認できたら、FLASHBACK TABLE文でもとに戻します。

-- 元に戻すSQL文(テーブル名は消したテーブル名)
-- 2022/03/09 10:00:00の箇所はデータが存在したであろう日時を指定してください。
FLASHBACK TABLE <テーブル名> TO_TIMESTAMP('2022/03/09 10:00:00','YYYY/MM/DD HH24:MI:SS');