1. 闪回删除
1.1 概述
Oracle的Flashback Drop闪回删除是用来撤销drop table语句的,其原理和windows的回收站相同。当执行drop table语句时,oracle并不会将表删除,而是将表及相关对象重命名并放入回收站。回收站中的对象可以像普通表一样查询。
恢复被错误drop掉的表。当一张表被删除后,依然可以查看被drop表的内容,是通过查看回收站中的内容实现的。
被删除的表将被存在一个叫recyclebin回收站的地方,当drop掉表后,实际上就是将改表改了个名字。
1.2 使用场景和限制
闪回删除原理:
(回收站机制,所以使用drop table tablename purge;命令删除的表无法使用闪回恢复,只能使用备份恢复)
防止错误的删除表、索引等数据库对象。针对非system 表空间,适用于通过drop 操作和非purge 的方式删除的对象可以在recyclebin使用闪回删除操作还原删除的对象(包括相关索引,约束,触发器)。
优势:
- 在没有使用闪回删除之前只能使用传统的数据恢复的方式从备份中恢复,此时需要备份文件以及归档日志文件;
- 而闪回删除不需要备份文件以及归档日志文件,使用的原理是回收站机制;
不足:
- 只能是drop删除的数据,应为这样删除的数据会放入到回收站中,该信息会保留一段时间;
- 直到回收站空间不足或者使用purge清除了回收站的信息;
- 闪回数据:RVWR+闪回日志+归档日志;
- 闪回现有表:undo tablespace;
- 闪回删除表:recyclebin;
1.3 工作原理
1.3.1 原理剖析
执行drop table时,表和索引并没有被真正删除,其所占空间(称为段)只是分配给了回收站对象,并且这种分配没有使数据和数据块发生任何移动,还是待在原来的数据文件及表空间中。
回收站对象的信息可以通过dba_recyclebin视图获得,普通用户可以使用show recyclebin命令查看自己的回收站: