PLSQL_闪回删除FlashBack Drop表误删除如何进行恢复(案例)

简介: 2014-06-25 Created By BaoXinjian 一、摘要 在PLSQL开发时,有时候会遇到对表的误删除,其实遇到这种情况不需要紧张,如果问题较大,请DBA帮忙,如果只是小问题,只需自己处理,利用flashback闪回操作即可,可将表进行恢复 在删除表时,系统一般都是表放入回收站中,并没有完全进行删除,因此,只需从回收站中进行恢复就可以了,原理和Window中的回收站一样,但是一旦将回收站中的资料再进行删除,这个就很难恢复了,只能向DBA求救 1. 回收站的概念 回收站,是一个虚拟的容器,用于存放所有被删除的对象。

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


ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
1月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
北京某国企客户Oracle 11g R2数据库误truncate table CM_CHECK_ITEM_HIS,表数据丢失,业务查询到该表时报错,数据库的备份不可用,无法查询表数据。 Oracle数据库执行Truncate命令的原理:在执行Truncate命令后ORACLE会在数据字典和Segment Header中更新表的Data Object ID,但不会修改实际数据部分的块。由于数据字典与段头的DATA_OBJECT_ID与后续的数据块中的并不一致,所以ORACLE服务进程在读取全表数据时不会读取到已经被TRUNCATE的记录,但是实际数据未被覆盖。
Oracle数据恢复—Oracle数据库误truncate table的数据恢复案例
|
11月前
|
SQL Oracle 关系型数据库
数据库复制对nologging操作的处理
当DML操作以NOLOGGING方式执行时,或者SQLLoader以UNRECOVERABLE方式进行直接路径加载时,会禁止生成重做日志或者只会生成很少的日志信息,这些可以加快这些操作的速度。
|
SQL Oracle 关系型数据库
truncate表后恢复方法总结
truncate表后恢复方法总结   1.1  BLOG文档结构图   1.2  前言部分   1.
1666 0
|
Oracle 关系型数据库
【Flashback】使用视图快速获得Flashback Query闪回查询数据
本文给出使用视图协助我们快速构造闪回查询内容,通过视图可以方便的检索“历史上的数据”。 1.构造闪回查询视图需求描述 1)准备员工表和工资表 2)删除工资表中雇佣年限在1994年之前的记录 3)创建视图可以查询工资表删除之前的记录 2.准备环境 1)准备员工表和工资表 sec@ora10g> create table emp (id number,name varchar2(20), e_date date); Table created. sec@ora10g> create table salary (id number, salary number); Table create
103 0
|
SQL Oracle 关系型数据库
Oracle闪回drop和闪回查询
        Oracle提供了7种闪回技术,分别为:闪回drop、闪回查询、闪回数据归档、闪回表、闪回版本查询、闪回事务、闪回数据库。此次验证下Oracle数据库闪回drop和闪回查询。 一、闪回DROP         又名闪回删除。
11052 0
|
Oracle 关系型数据库 数据库