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