削除したテーブルを「recyclebin」から復元させる手順

oracle-y-lupa-100

ドロップしたテーブルを復元させる手順

Oracle 10g から「recyclebin」という機能が実装され、この機能を有効にしておくと削除したテーブルを復元させることができます。

メリットとしては誤ってテーブルを削除してしまった場合は簡単に復旧させることができますが、デメリットとしてはrecyclebinの管理でリソースを消費してしまいます。必要に応じてこの機能をON/OFFすればいいかと思います。デフォルトはONです。



 

テーブル復元手順

ここでは、テーブル「AAA」とテーブル「TEST」を使用して検証します。

まずはrecyclebin機能がONであることを、初期化パラメータで確認します。ONになってますね。

SQL> show parameter recyclebin

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

 

まずはテーブル「AAA」を削除してみようと思いますが、削除前にテーブル内容を確認してみます。12レコードのデータが入っています。

SQL> select table_name from dba_tables where table_name='AAA';

TABLE_NAME
------------------------------
AAA

SQL> select * from AAA;

        ID MOJI
---------- --------------------
         1 aaa
         2 bbb
         3 ccc
         4 ddd
         5 eee
         6 fff
         7 ggg
         8 hhh
         9 iii
        10 jjj
        11 kkk
        12 mmm

12行が選択されました。

SQL>

 

ではテーブル「AAA」をドロップします。ドロップ後に削除されたことも確認します。

SQL> drop table AAA;

表が削除されました。

SQL> select table_name from user_tables where table_name='AAA';

レコードが選択されませんでした。

SQL>

 

では、削除したテーブル「AAA」がrecyclebin機能によって完全に削除されていないことを確認してみます。複雑なテーブル名で残っていることがわかります。

SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
AAA              BIN$6e12BFrvAMbgQwoKU9N//g==$0 TABLE        2013-10-30:12:15:35
SQL>

 

削除したテーブルの内容を確認することもできます。

SQL> select * from "BIN$6e12BFrvAMbgQwoKU9N//g==$0";

        ID MOJI
---------- --------------------
         1 aaa
         2 bbb
         3 ccc
         4 ddd
         5 eee
         6 fff
         7 ggg
         8 hhh
         9 iii
        10 jjj
        11 kkk
        12 mmm

12行が選択されました。

SQL>

 

それでは、ドロップしたテーブル「AAA」をflashbackで復元してみます。

SQL> flashback table "BIN$6e12BFrvAMbgQwoKU9N//g==$0" to before drop;

フラッシュバックが完了しました。

SQL>

 

これで復元完了です。確認してみると削除前の状態に復元できていることを確認できました。

SQL> select table_name from dba_tables where table_name='AAA';

TABLE_NAME
------------------------------
AAA

SQL> select * from AAA;

        ID MOJI
---------- --------------------
         1 aaa
         2 bbb
         3 ccc
         4 ddd
         5 eee
         6 fff
         7 ggg
         8 hhh
         9 iii
        10 jjj
        11 kkk
        12 mmm

12行が選択されました。

SQL>

 

recyclebinに残ったテーブルを削除する方法

テーブルをドロップしてもrecyclebinに残ることが確認できましたが、残っているということはそのテーブルの容量分がサイズとして使用されていることになります。本当に削除して問題ない場合は完全に削除してリソースを開放する必要があります。

テーブル「AAA」とテーブル「TEST」をドロップした後の状態から続けます。

recyclebinの内容を確認してみます。

SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
AAA              BIN$6e12BFrwAMbgQwoKU9N//g==$0 TABLE        2013-10-30:12:19:15
TEST             BIN$6e12BFrxAMbgQwoKU9N//g==$0 TABLE        2013-10-30:12:22:18
SQL>

 

2テーブルがrecyclebinに保管されています。
ではここからテーブル「AAA」を完全に削除します。purgeを使って削除しますが2通りの消し方があります。

パターン1

SQL> purge table "BIN$6e12BFrwAMbgQwoKU9N//g==$0";

表がパージされました。

SQL>

パターン2

SQL> purge table aaa;

表がパージされました。

SQL>

 

recyclebinを確認すると完全に削除されたことが確認できました。

SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TEST             BIN$6e12BFrxAMbgQwoKU9N//g==$0 TABLE        2013-10-30:12:22:18
SQL>

 

recyclebinにあるテーブルをまとめて全部削除する方法

recyclebinにあるテーブルをまとめて全部削除することもできます。

SQL> purge recyclebin;

リサイクルビンがパージされました。

SQL>

 

確認すると完全に消えてました。

SQL> show recyclebin
SQL>

 

recyclebinを経由せずにテーブルを完全に削除する方法

recyclebin機能を経由せずに完全にテーブルを削除することもできます。ここではテーブル「TEST」を完全に削除してみます。

drop table ~ の後にpurgeを付ければいいです。

SQL> drop table test purge;

表が削除されました。

SQL>

 

recyclebinを確認してみると残っていないことがわかります。

SQL> show recyclebin
SQL>

 

念のため、テーブルとしても存在しないことも確認してみました。

SQL> select table_name from dba_tables where table_name='TEST';

レコードが選択されませんでした。

SQL>

 

SELECTでrecyclebinを確認

これまでrecyclebinの内容は「show recyclebin」で確認してきましたが、selectでの確認では更に詳細な情報を確認することができます。

SQL> select * from RECYCLEBIN;

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION TYPE
------------------------------ -------------------------------- --------- -------------------------
TS_NAME                        CREATETIME          DROPTIME               DROPSCN
------------------------------ ------------------- ------------------- ----------
PARTITION_NAME                   CAN CAN    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
-------------------------------- --- --- ---------- ----------- ------------ ----------
BIN$6e4QPTF3AIDgQwoKU9Mvpw==$0 TEST                             DROP      TABLE
TEST_TS                        2013-10-30:12:41:16 2013-10-30:12:41:26    1736336
                                 YES YES      87573       87573        87573          8

BIN$6e4QPTF2AIDgQwoKU9Mvpw==$0 AAA                              DROP      TABLE
TEST_TS                        2013-10-30:12:41:11 2013-10-30:12:41:21    1736299
                                 YES YES      87572       87572        87572          8


SQL>

 



 

 


サブコンテンツ

このページの先頭へ