ゴミ箱の確認・復旧・削除方法

この記事ではゴミ箱の確認・復旧・削除方法について解説します。

 ゴミ箱機能とは

Oracle Databaseには表や索引を誤って削除した際に復旧するためにゴミ箱の機能が存在します。

削除した表や索引は完全に消去されずにゴミ箱へと格納されます。

そのゴミ箱の中から削除してしまった表や索引を復旧することができます。


 ゴミ箱機能の有効化の確認

ゴミ箱機能は初期化パラメータ「RECYCLEBIN」で有効化・無効化が設定できます。

値が「ON」なら有効、「OFF」なら無効になっています。


 ゴミ箱の確認方法

ゴミ箱機能を有効化して、表を削除してみます。

SQL> show parameter recyclebin
NAME                                 TYPE                 VALUE
------------------------------------ -------------------- ---------------------
recyclebin                           string               on

SQL> drop table emp2;
表が削除されました。

この場合、完全に「emp2」表は完全に削除されず、ゴミ箱へ入ります。

ゴミ箱を確認は下記のSQLを使用します。

select OBJECT_NAME, ORIGINAL_NAME, OPERATION, TYPE, TS_NAME, CAN_UNDROP, CAN_PURGE
  from recyclebin;

実際に確認します。

SQL> select OBJECT_NAME, ORIGINAL_NAME, OPERATION, TYPE, TS_NAME, CAN_UNDROP, CAN_PURGE from recyclebin;
OBJECT_NAME                    ORIGINAL_NAME                  OPERATION TYPE  TS_NAME CAN_UNDROP CAN_PURGE
------------------------------ ------------------------------ --------- ----- ------- ---------- ---------
BIN$PmXsx71yQImT8fmuuQQbvg==$1 BIN$uIRJVKOJSTSPwJjsTa5BJA==$0 DROP      INDEX TESTTBS NO         YES
BIN$0eCP6oXJQS+UzY0pQrUL5A==$0 EMP2                           DROP      TABLE TESTTBS YES        YES

削除した表「EMP2」が確認できます。

削除された表は表明が変換されゴミ箱へ格納されます。


 削除したオブジェクトの復旧方法

ゴミ箱内のオブジェクトは「CAN_UNDROP」列がYESなら復旧することができます。

復旧は以下のSQLで実施します。

FLASHBACK TABLE <テーブル名> TO BEFORE DROP;

テーブル名は元の名前でも削除後の名前でも復旧可能です。

実際に削除した「EMP2」表を復旧してみます。

SQL> FLASHBACK TABLE EMP2 TO BEFORE DROP;
フラッシュバックが完了しました。

するとゴミ箱から消えて、「EMP2」表が復活します。


 ゴミ箱から削除する方法

ゴミ箱から完全に削除するには「PURGE」文を使用します。

下記のSQLを実行するとゴミ箱の中身を完全に削除できます。

PURGE RECYCLEBIN;

またDROP文の末尾に「PURGE」をつけることによって、ゴミ箱を使用せずに完全にオブジェクトを削除できます。

DROP TABLE <テーブル名> PURGE;

PURGE処理は表領域の容量が不足した場合には自動で行われます。