Oracle フラッシュバック・ドロップ:削除した表を「ゴミ箱」から救い出す魔法のコマンド

Oracle Master Gold

Oracle Databaseを運用していて、最も冷や汗をかく瞬間の一つが「大事な表を誤ってDROPしてしまった」ときです。しかし、Oracleにはフラッシュバック・ドロップ(Flashback Drop)という強力な救済機能が備わっています。

Windowsの「ごみ箱」のように、削除した表を一時的に保管し、一瞬で元に戻す方法を分かりやすく解説します。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


🔰 フラッシュバック・ドロップとは?

フラッシュバック・ドロップは、削除(DROP)された表をリサイクルビン(Recycle Bin)から元の状態に復元する機能です。

表を削除しても、ディスク上のデータが即座に消去されるわけではありません。内部的に「BIN$〜」という名前に書き換えられ、一時保存されているだけなのです。


✅ 使用できる条件と設定の確認

この機能を使うには、事前に「リサイクルビン」が有効になっている必要があります。

確認項目コマンド / 確認方法備考
RECYCLEBINの有効化SHOW PARAMETER recyclebin;VALUEが ON であること。
表領域の空き容量DBA_FREE_SPACE などを確認空きがなくなると古いものから自動削除されます。
オブジェクトの種類インデックス等も一緒に保存されますが、一部制約は注意が必要。

豆知識:他のフラッシュバック機能(クエリやテーブル)とは異なり、UNDO情報は不要です。リサイクルビン内のデータそのものを使用するため、UNDO保持期間を気にする必要はありません。


🛠 実践!フラッシュバック・ドロップの手順

実際にテーブルを作成し、削除から復旧までの流れをコマンドで追ってみましょう。

1. 検証用データの準備

-- テーブル作成
CREATE TABLE test_flashback (
  id NUMBER,
  name VARCHAR2(100)
);

-- データ挿入
INSERT INTO test_flashback VALUES (1, 'Oracle');
COMMIT;

2. 誤操作(DROP)の実行

誤って表を削除してしまいます。

DROP TABLE test_flashback;

3. リサイクルビンの確認

削除された表がどこにあるか確認します。

SHOW RECYCLEBIN;

-- ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
-- ---------------- ------------------------------ ------------ -------------------
-- TEST_FLASHBACK   BIN$KJ32lskjf23jlf==           TABLE        2026-05-07:22:00:00

4. フラッシュバック・ドロップの実行(復元)

魔法のコマンドで「削除前」の状態に戻します。

FLASHBACK TABLE test_flashback TO BEFORE DROP;

5. 復元確認

SELECT * FROM test_flashback;
-- 削除前のデータが正しく表示されれば成功です!

🚨 注意!復元できない「完全削除」のケース

以下のケースではリサイクルビンに入らないため、フラッシュバック・ドロップは使えません。

  • PURGEオプション付きの削除: DROP TABLE xxx PURGE; を実行した場合。
  • 手動パージ: PURGE TABLE xxx; でリサイクルビンから消去した場合。
  • ユーザー削除: DROP USER xxx CASCADE; でユーザーごと削除した場合。
  • 表領域の不足: ディスク容量が足りなくなると、Oracleが自動的に古い順からリサイクルビンを空にします。
  • SYSTEM表領域: SYSTEM表領域内のオブジェクトは対象外です。

🧹 リサイクルビンの管理と設定

不要なデータの整理(削除)

-- 特定の表だけ完全に消去
PURGE TABLE test_flashback;

-- 自分のリサイクルビンを空にする
PURGE RECYCLEBIN;

-- データベース全体のリサイクルビンを空にする(SYSDBA権限が必要)
PURGE DBA_RECYCLEBIN;

機能自体のON/OFF切り替え

-- セッション単位で一時的にOFFにする
ALTER SESSION SET recyclebin = OFF;

-- システム全体でOFFにする(再起動後に有効)
ALTER SYSTEM SET recyclebin = OFF SCOPE = SPFILE;

FAQ

Q:復元したとき、インデックスの名前も元に戻りますか?

A:データは戻りますが、インデックスや制約の名前は「BIN$〜」というシステム名のままになることがあります。必要に応じて ALTER INDEX "BIN$..." RENAME TO my_idx; のようにリネームしてください。

Q:同じ名前の表を2回DROPしてしまいました。どうなりますか?

A:リサイクルビンには両方残ります。単に表名で指定すると最後に削除したものが復元されます。特定のものを戻したい場合は、RECYCLEBIN NAME(BIN$〜)を直接指定して復元します。

Q:Standard Editionでも使えますか?

A:はい。フラッシュバック・ドロップはStandard Editionでも標準で利用可能な非常に親切な機能です。


✍ まとめ

ポイント内容
核となる機能削除された表を「リサイクルビン」から救出する。
主要コマンドFLASHBACK TABLE 表名 TO BEFORE DROP;
必須条件RECYCLEBIN パラメータが ON であること。
運用のコツ領域を圧迫しないよう、定期的に PURGE で整理を行う。

フラッシュバック・ドロップは、万が一のミスを救う強力なバックアップ策ですが、ディスク容量やPURGEオプション次第では使えないこともあります。この機能に頼り切りにならず、日頃のバックアップ運用もしっかり行いましょう。

もし、削除ではなく「一部のデータだけ10分前に戻したい」といった場合は、フラッシュバック・クエリを検討してみてください。

本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。


[参考]
FLASHBACK TABLE

フラッシュバック・データベースの構築手順と運用の極意
Oracle Databaseを運用する上で、最も強力な「保険」の一つがフラッシュバック・データベース(Flashback Database)です。 ユーザーが誤って大規模な更新を行ったり、アプリケーションのバグでデータが壊れたりした際、デ…
Oracle フラッシュバックテクノロジーとは?
〜誤操作からの救世主、Oracleの強力な巻き戻し機能を解説〜Oracle Databaseには、時間を巻き戻す魔法のような機能「フラッシュバックテクノロジー(Flashback Technology)」が備わっています。ユーザーが誤ってデ…

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました