首页 > 代码库 > PLSQL_闪回删除FlashBack Drop表误删除如何进行恢复(案例)
PLSQL_闪回删除FlashBack Drop表误删除如何进行恢复(案例)
2014-06-25 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 确认恢复的索引和表的关系是否正常
********************作者: 鲍新建********************