ZAKO-PG

こんなザコがプログラマーなの?

Oracle10gで誤ってテーブルを消してしまった時の対処法

スポンサーリンク

f:id:cookie11109:20180810170850p:plain
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機能をOFFにしたい時

RECYCLEBINは表領域に保存しているため、データが必要以上に大きくなる可能性があります。

「日時バックアップを取っているから平気だよ」という方は、以下のSQLを実行すればRECYCLEBIN機能がOFFになります。

ALTER SYSTEM SET RECYCLEBIN = OFF;

PostgreSQLでは使えない

うちの会社ではPostgreSQLも使っているのですが、RECYCLEBINのような機能はなさそうです。
もしあったら教えてください……!