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


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


コメント