
【DB笔试面试813】在Oracle中,什么是闪回删除(Flashback DROP)?回收站的作用是什么?
闪回删除(Flashback DROP)是将已经删除(DROP)的表及表上的索引恢复到删除前的状态,但索引名不会恢复到删除前的状态。这由基于回收站(Recycle Bin)特性实现。
从Oracle 10g开始,为了支持闪回删除(Flashback Drop)功能,Oracle引入了回收站(Recycle Bin)的概念。它的全称叫Tablespace Recycle Bin。回收站实际是一个逻辑容器(逻辑区域),原理有点类似于Windows系统的回收站。它以表空间中现有已经分配的空间为基础,而不是从表空间上物理划出一个固定区域用作回收站。这意味着回收站和表空间中的对象共用存储区域、系统没有给回收站预留空间。
从原理上来说,回收站就是一个数据字典表,放置用户已删除的的数据库对象信息。用户进行DROP操作的对象并没有被数据库删除,仍然会占用空间,除非是由用户手工进行PURGE或者因为存储空间不够而被数据库清除掉。在回收站功能被打开的情况下,当某个表被删除时,它就被移动到了回收站中。该对象一直保存在回收站中,直到清除回收站为止。因此,如果使用类似“DROP TABLE T_LHR;”的语句,那么T_T_LHR表就被移动到了回收站中。如果希望彻底删除T_LHR表,而不是保存在回收站中,那么可以在DROP TABLE命令中使用PURGE参数,命令为“DROP TABLE T_LHR PURGE;”。回收站功能可以在系统和会话级别开启,如下所示:
1系统级别:ALTER SYSTEM SET RECYCLEBIN = ON SCOPE=SPFILE;
2
3会话级别:ALTER SESSION SET RECYCLEBIN = ON;
关于闪回删除需要注意以下几点:
① 只能用于非系统表空间和本地管理的表空间。在SYSTEM表空间中的表被DROP后不会进入回收站。
② 对象的参考约束不会被恢复,指向该对象的外键约束需要重建。
③ 对象能否恢复成功,取决于对象空间是否被覆盖重用。
④ 当删除表时,依赖于该表的物化视图也会同时被删除,但是由于物化视图并不会被放入回收站,因此,当执行FLASHBACK TABLE TO BEFORE DROP时,也不能恢复依赖于该表的物化视图,这个时候就需要DBA手工介入重新创建物化视图。
⑤ 对于回收站中的对象,只支持查询。
⑥ 表被恢复以后,表上的索引,需要重建,虽然索引可以随着表的闪回而闪回,但是闪回后的索引仍然使用回收站中的名称,因此,需要重建索引。
⑦ 在使用“FLASHBACK TABLE ... TO BEFORE DROP”命令从回收站恢复表及其所有可能的相关对象时,可以指定表的原始名称或删除对象时分配给对象的系统生成名称。如果指定原始名称,且回收站包含多个具有该名称的对象,那么Oracle会最先恢复最晚移动到回收站的对象(LIFO:后进先出)。如果删除原始表后又在同一用户中创建了同名的新表,那么这个时候再执行FLASHBACK TABLE时会返回错误,此时需要指定RENAME TO子句。
闪回回收站中指定的表:
1FLASHBACK TABLE "BIN$zltzJRsMB0PgRAAY/i3Kdw==$0" TO BEFORE DROP;
在使用“FLASHBACK TABLE ... TO BEFORE DROP”命令从回收站恢复表及其所有可能的相关对象时,可以指定表的原始名称或删除对象时分配给对象的系统生成名称。如果指定原始名称,且回收站包含多个具有该名称的对象,那么Oracle会最先恢复最晚移动到回收站的对象(LIFO:后进先出)。如果删除原始表后又在同一用户中创建了同名的新表,那么这个时候再执行FLASHBACK TABLE时会返回错误,此时需要指定RENAME TO子句。
下面给出一个使用回收站的例子:
1SYS@oralhr> SHOW PARAMETER RECYCLEBIN
2NAME TYPE VALUE
3------------------------------------ ---------------------- ------------------------------
4recyclebin string OFF
5SYS@oralhr> alter system set recyclebin=on scope=spfile;
6System altered.
7SYS@oralhr> STARTUP FORCE; ====》慎用,不推荐
8ORACLE instance started.
9Total System Global Area 3089920000 bytes
10Fixed Size 2250360 bytes
11Variable Size 721422728 bytes
12Database Buffers 2348810240 bytes
13Redo Buffers 17436672 bytes
14Database mounted.
15Database opened.
16SYS@oralhr> SHOW PARAMETER RECYCLEBIN
17NAME TYPE VALUE
18------------------------------------ ---------------------- ------------------------------
19recyclebin string ON
20SYS@oralhr> CREATE TABLE TB_20160627_LHR AS SELECT * FROM DUAL;
21Table created.
22SYS@oralhr> DROP TABLE TB_20160627_LHR;
23Table dropped.
24SYS@oralhr> SELECT * FROM DBA_RECYCLEBIN;
25no rows selected
26SYS@oralhr> CREATE TABLE TB_20160627_LHR TABLESPACE USERS AS SELECT * FROM DUAL;
27Table created.
28SYS@oralhr> DROP TABLE TB_20160627_LHR;
29Table dropped.
30SYS@oralhr> SELECT * FROM DBA_RECYCLEBIN;
31OWNER OBJECT_NAME ORIGINAL_NAME
32--------- ------------------------------ ----------------
33SYS BIN$Njoq6PZtAGzgUxa8wKsAbA==$0 TB_20160627_LHR
需要特别注意的是,SYSTEM表空间的表被DROP后不会进入回收站空间。
& 说明:
有关回收站的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2136497/、http://blog.itpub.net/26736162/viewspace-2121136/、http://blog.itpub.net/26736162/viewspace-2121137/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

==================================================================================================================【干货来了|小麦苗IT资料分享】★小麦苗DB职场干货:https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w★小麦苗数据库健康检查:https://share.weiyun.com/5lb2U2M★小麦苗微店:https://weidian.com/?userid=793741433★各种操作系统下的数据库安装文件(Linux、Windows、AIX等):https://pan.baidu.com/s/1hqff3Evv6oj2-Tn87MpFkQ★小麦苗分享的资料:https://share.weiyun.com/57HUxNi★小麦苗课堂资料:https://share.weiyun.com/5fAdN5m★小麦苗课堂试听资料:https://share.weiyun.com/5HnQEuL★小麦苗出版的相关书籍:https://share.weiyun.com/5sQBQpY★小麦苗博客文章:https://share.weiyun.com/5ufi4Dx★数据库系列(Oracle、MySQL、NoSQL):https://share.weiyun.com/5n1u8gv★公开课录像文件:https://share.weiyun.com/5yd7ukG★其它常用软件分享:https://share.weiyun.com/53BlaHX★其它IT资料(OS、网络、存储等):https://share.weiyun.com/5Mn6ESi★Python资料:https://share.weiyun.com/5iuQ2Fn★已安装配置好的虚拟机:https://share.weiyun.com/5E8pxvT★小麦苗腾讯课堂:https://lhr.ke.qq.com/★小麦苗博客:http://blog.itpub.net/26736162/★OCP培训:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA★12c的OCP培训:https://mp.weixin.qq.com/s/hMLHlyjMHhLmA0xN4hLvfw★OCM培训:https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA★高可用(RAC+DG+OGG)培训:https://mp.weixin.qq.com/s/4vf042CnOdAD8zDyjUueiw★小麦苗课堂腾讯视频:http://v.qq.com/vplus/71f69a319a24c6808cd6e6189ae90664==================================================================================================================



● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599、618766405
● 微信:lhrbestxh
● 微信公众号:DB宝
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。







