Oracle恢复被删除表&彻底删除表方式

概述:

工作过程中,会出现误删表的情况,这时,可以通过flashback的方式恢复被删除的表。
通过

flashback table table_name to before drop;

语句可以实现恢复表的功能。

如果想要完全删除,在最后增加purge即可。

drop table CELL_SIGN_PD_LIST_ZQ purge;

接下来,我们通过实验的方式进行验证理解。

实验

有如下表:CELL_SIGN_PD_LIST_ZQ

Oracle恢复被删除表&彻底删除表方式_第1张图片

我们查看下该表占用的表空间和表的大小。

--查询表空间的剩余空间
select 
    t.TABLESPACE_NAME
   ,SUM(t.BYTES/1024/1024) sz 
from dba_free_space t 
group by t.TABLESPACE_NAME;
--查询表占用空间
select 
    t.segment_name
   ,t.BYTES/1024/1024 sz 
from user_segments t 
where t.segment_type = 'TABLE' 
order by sz desc

Oracle恢复被删除表&彻底删除表方式_第2张图片
Oracle恢复被删除表&彻底删除表方式_第3张图片

执行删表操作:

drop table CELL_SIGN_PD_LIST_ZQ;

再次查询表,可以确定表确实已删除:

select * form CELL_SIGN_PD_LIST_ZQ;

Oracle恢复被删除表&彻底删除表方式_第4张图片
再次查询便空间大小,可以看到已经释放了空间。
Oracle恢复被删除表&彻底删除表方式_第5张图片

通过flashback恢复表

flashback table CELL_SIGN_PD_LIST_ZQ to before drop;

再次查询表,可以看到,表已经恢复,并且表空间相应的变小了。

select * form CELL_SIGN_PD_LIST_ZQ;

Oracle恢复被删除表&彻底删除表方式_第6张图片


下面测试下完全删除表:purge
有如下一张测试表:test_purge
Oracle恢复被删除表&彻底删除表方式_第7张图片
彻底删除表:

drop table test_purge purge;

尝试恢复表:

flashback table  test_purge to before drop

发现无法恢复,并报错:对象不再回收站内。
Oracle恢复被删除表&彻底删除表方式_第8张图片

事实上:
drop table 语句中,除非指定了purge字句,否则drop table并不会立即删除表,Oracle只是简单的重命名此表并将其存储在回收站中。

你可能感兴趣的:(数据库Mysql&Oracle)