Oracleで消しちゃいけないテーブルをDROPしてしまったときの対象法です。
使わないほうがいいけど、念の為覚えておきましょう。
Oracle10gのDROP TABLEは完全削除ではない!
Oracle10gから、DROP TABLEの仕様が変更になりました。今まではDROP TABLEをしたら、ROLLBACKしてももうそのテーブルは二度と戻らない仕様でした。
しかし、Oracle10gから、DROPされたテーブルは一旦RECYCLEBINという表領域に格納される仕様になりました。
RECYCLEBINは、OSでいうゴミ箱と似たようなもの、くらいの認識でとりあえず覚えておきましょう。
RECYCLEBINにデータが溜まっていれば、SQLを実行してRECYCLEBINに格納されたテーブルを元に戻すことができます。
RECYCLEBINからテーブルを元に戻す方法
SQL自体はとっても簡単です。FLASHBACK TABLE テーブル名 TO BEFORE DROP;
またRECYCLEBINに入っているテーブル名を見る時は、 SQL*Plusで以下を実行すればOKです。
SHOW RECYCLEBIN
RECYCLEBINを使う時の注意点
RECYCLEBINはあくまで、テーブルを元に戻すだけで制約などは復元できません。
テーブルを元に戻した後に、制約を入れ直す対応が必要になります。
RECYCLEBINはあくまで、テーブルを元に戻すだけで制約などは復元できません。
テーブルを元に戻した後に、制約を入れ直す対応が必要になります。
RECYCLEBIN機能をOFFにしたい時
RECYCLEBINは表領域に保存しているため、データが必要以上に大きくなる可能性があります。「日時バックアップを取っているから平気だよ」という方は、以下のSQLを実行すればRECYCLEBIN機能がOFFになります。
ALTER SYSTEM SET RECYCLEBIN = OFF;
PostgreSQLでは使えない
うちの会社ではPostgreSQLも使っているのですが、RECYCLEBINのような機能はなさそうです。もしあったら教えてください……!