Oracle10g フラッシュバック アゲインの巻 その7

投稿日:

<Oracle10g フラッシュバック アゲイン の巻 その7>
ペンネーム:びー・うぃりー

先週に引き続きフラッシュバックに関する動作確認をしてまいります。
今週は「フラッシュバック・ドロップ」です。

一旦削除してしまった表を復元する機能です。これはWindowsでおなじみの
「ゴミ箱」と似ています。従来のOracleではDropしてしまった表を復元するこ
とはできませんでした。Oracle10gではこの「ゴミ箱」機能を追加する事で表
の復活をサポートしてます。Recyclebin領域ともよばれてます。

ただRecyclebin領域といっても特別な表領域があるわけでもなく表をDropして
もすぐに解放せずに違う名前で保管しているだけです。
早速の確認してみましょう。

■環境
Microsoft Windows XP Pro
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Production
With the Partitioning, OLAP and Data Mining options

■はじめ!!!

早速、現在所有しているオブジェクトの名前と種類を確認します。

SQL> SELECT OBJECT_NAME ,OBJECT_TYPE FROM USER_OBJECTS;

OBJECT_NAME                              OBJECT_TYPE
---------------------------------------- -------------------
PK_FLASHBACK_TEST                        INDEX
FLASHBACK_TEST                           TABLE

FLASHBACK_TESTを削除します。

SQL> DROP TABLE FLASHBACK_TEST;
Table dropped.

SQL> SELECT OBJECT_NAME ,OBJECT_TYPE FROM USER_OBJECTS;

OBJECT_NAME                              OBJECT_TYPE
---------------------------------------- -------------------
BIN$k7agxkkzRPabXvQ2Tgevxg==$0           TABLE
BIN$gTidcs+aTxqr0/L/bihIMA==$0           INDEX

名前が変更されてます。それでも確認できますから・・。
注:ダブルクォートで囲んでください。

SQL> SELECT * FROM "BIN$k7agxkkzRPabXvQ2Tgevxg==$0";

COL1  COL2
----- -----
11111 AAAAA
22222 BBBBB
33333 CCCCC

ではフラッシュバックテーブルで復元します。

SQL> FLASHBACK TABLE "BIN$k7agxkkzRPabXvQ2Tgevxg==$0" TO BEFORE DROP;
Flashback complete.

元のテーブル名が複数存在する場合も考慮して、この”へんてこな”テーブル
名を指定するのが得策です。

また、FLASHTABLE “BIN$k7agxkkzRPabXvQ2Tgevxg==$0” TO BEFORE DROP RENAME
TO 別名テーブル;とすれば、別名として復元できます。

ただし、INDEX名は”へんてこ”名のままですが、昔の名前でも使用可能なよ
うです。

SQL> SELECT OBJECT_NAME ,OBJECT_TYPE FROM USER_OBJECTS;

OBJECT_NAME                              OBJECT_TYPE
---------------------------------------- -------------------
FLASHBACK_TEST                           TABLE
BIN$gTidcs+aTxqr0/L/bihIMA==$0           INDEX

SQL> SELECT /*+ USE_INDEX(A,PK_FLASHBACK_TEST) */ COL1 FROM FLASHBACK_TEST A 
     WHERE COL1='11111';

COL1