从oracle10g开始,oracle引入了flashback drop的特性,当我们使用drop
table命令删除表的时候,表并不会被真实的删掉,而是变换了一个段的名称
继续保留在表空间中,我们可以使用flashback drop命令把表再恢复出来。
关于flashback
drop1.oracle引入了一个参数recyclebin,默认为on,表示drop
table会把表放在回收站里,只有在回收站里的表才可以恢复回来
2.当表所在的表空间空间不足时,oracle会自动覆盖最早删除到回收站里的数据,采用先进先出原则
3.当你把多个相同名称的对象删除,比如在回收站里有三个原始名称是T的表,oracle使用flashback
drop技术恢复时,会采用后进先出的原则,最后删
掉的表先还原回来
4.如果不想使用回收站,除了把参数recyclebin参数改为off外,还可以使用drop
table 表名称 purge;的方法
5.当删除表后,依赖于表的索引也会被删掉,当把表闪回回来后,索引也会闪回回来。
6.使用purge recyclebin命令,可以清空掉回收站。
下面是一个小例子,演示了最简单的oracle的flashback drop
SQL> create table stu(id number,name
varchar2(10)) tablespace users;
表已创建。
SQL> insert into stu values(100,'tom');
已创建 1 行。
SQL> insert into stu values(200,'mike');
已创建 1 行。
SQL> commit;
提交完成。
SQL> create index stu_n_idx on stu(name);
索引已创建。
SQL> select table_name,index_name from
user_indexes
2 where table_name='STU';
TABLE_NAME INDEX_NAME
------------------------------ ------------------------------
STU STU_N_IDX
SQL> drop table stu;
表已删除。
SQL> select table_name,index_name from
user_indexes
2 where
table_name='STU';
未选定行
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN
NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------
-------------------
STU BIN$/cmvSV0aTteK+UbbW1BA3g==$0
TABLE 2008-03-22:20:45:41
SQL>
SQL>
SQL> flashback table stu to before drop;
闪回完成。
SQL> show recyclebin
SQL> select table_name,index_name
from user_indexes
2 where
table_name='STU';
TABLE_NAME INDEX_NAME
------------------------------ ------------------------------
STU BIN$ADX4e7XxQOuorJKi5hM/IA==$0
SQL> alter index "BIN$ADX4e7XxQOuorJKi5hM/IA==$0"
rename to STU_N_IDX;
索引已更改。
SQL> select
table_name,index_name from user_indexes
2 where
table_name='STU';
TABLE_NAME INDEX_NAME
------------------------------ ------------------------------
STU STU_N_IDX