PLSQL_閃回刪除FlashBack Drop表誤刪除如何進行恢復(案例)


2014-06-25 Created By BaoXinjian

一、摘要


在PLSQL開發時,有時候會遇到對表的誤刪除,其實遇到這種情況不需要緊張,如果問題較大,請DBA幫忙,如果只是小問題,只需自己處理,利用flashback閃回操作即可,可將表進行恢復

在刪除表時,系統一般都是表放入回收站中,並沒有完全進行刪除,因此,只需從回收站中進行恢復就可以了,原理和Window中的回收站一樣,但是一旦將回收站中的資料再進行刪除,這個就很難恢復了,只能向DBA求救

1. 回收站的概念

回收站,是一個虛擬的容器,用於存放所有被刪除的對象。

實質上說,對於一個對象的刪除,數據庫僅僅是簡單的重命名操作。

數據庫參數recyclebin設置為on.(即默認設置)。參數recyclebin為on,則表示把Drop的對象放入回收站。為off,則表示直接刪除對象而不放入回收站。

2. 查看recyclebin值命令

SQL> show parameter bin;

NAME                         TYPE       VALUE

-----------------------------------------------

recyclebin                   string      on

3. 在系統或會話級別中修改參數recyclebin值的命令為

SQL>alter system set recyclebin = on|off;

SQL>alter session set recyclebin = on|off;

4. 對回收站的相關操作

查看回收站的相關信息視圖有:recyclebin/user_recyclebin/dba_recyclebin.

手動清除回收站的信息為:purge recyclebin(或purge table original_name);

刪除一張表而不想放入回收站的命令為:drop table table_name purge;

 

二、詳細解析


案例: 對誤刪除的表bxj_tst_recyclebin進行恢復,並將表中的Index也一並恢復

Step1. 創建測試表、測試索引和測試數據

 1 /*創建測試表*/
 2 create table bxj_tst_recyclebin(  3  creation_date date,  4   comments varchar2(240)  5 );
6 /*創建測試索引*/ 7 create index ind_creation_date on bxj_tst_recyclebin(creation_date);
8 /*創建測試數據*/ 9 insert into bxj_tst_recyclebin values (sysdate, 'BXJ TEST Recyclebin 1'); 10 insert into bxj_tst_recyclebin values (sysdate, 'BXJ TEST Recyclebin 2'); 11 insert into bxj_tst_recyclebin values (sysdate, 'BXJ TEST Recyclebin 3'); 12 insert into bxj_tst_recyclebin values (sysdate, 'BXJ TEST Recyclebin 4'); 13 insert into bxj_tst_recyclebin values (sysdate, 'BXJ TEST Recyclebin 5');

 

Step2. 在刪除表前,確認表中所有數據,總過5條

 

Step3. 刪除表

drop table bxj_tst_recyclebin

 

Step4. 對表進行恢復

Step4.1 查看表被存放到user_recyclebin中,object name變更為BIN$/KUwk5M0NTfgQDQKbgxFbw==$0

Step4.2 表中數據仍舊被保存在回收站的object中(BIN$/KUwk5M0NTfgQDQKbgxFbw==$0),其實刪除過程中,只是修改一個object name而已

Step4.3 通過flashback對表進行恢復

flashback table bxj_tst_recyclebin to before drop

Step4.4 恢復表后,確認數據是否一切正常,數據較少時通過select * 明細進行比對,數據較多時通過select count(*) 總量進行比對即可

 

Step5. 對表中的索引進行恢復

Step5.1 表恢復后,你可以查到該表對應的索引還在回收站中

 

Step5.2 通過alert Index名對索引進行恢復

alter index "BIN$/KUwk5MzNTfgQDQKbgxFbw==$0" rename to ind_creation_date

Step5.3 確認恢復的索引和表的關系是否正常

 

Thanks and Regards



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM