Oracle闪回表(笔记)
Flashback是ORACLE9i开始新特性,但9I只支持FlashQuery,即根据回滚段读取表某个时间点的数据。 到了10G,Oracle通过Recyle bin(回改站)与FlashArea(闪回区)实现快速恢复删除表((Flashback Table)和数据库时间点恢复((Flashback Database)(不需要全备份哦)。本文只记录了Flashback Table方法与特性。
Oracle10g的Drop Table并不是直正的删除,而是更名。
SQL>create table gjj_test(id number,name varchar2(64));
SQL>create index gjj_test_idx on gjj_test(id);
SQL>begin for i in 1..1000 loop insert into gjj_test values(i,'gjj');end loop;end;
SQL> select> 2/
RELATIVE_FNO BYTES BLOCKS EXTENTS
------------ ---------- ---------- ----------
4 65536 8 1
SQL>drop table gjj_test
SQL> select * from recyclebin
2/
OBJECT_NAME ORIGINAL_NAME
------------------------------ ---------------
BIN$HLWT85NWSGmsv4pq+aJFUw==$0 GJJ_TEST
SQL> select> 2/
RELATIVE_FNO BYTES BLOCKS EXTENTS
------------ ---------- ---------- ----------
4 65536 8 1
可以看到Drop Table并不是直正的删除,而是更名为BIN$HLWT85NWSGmsv4pq+aJFUw==$0,存储空间也没有发生变化。
依赖于原表的存储过程都失效了,而建在表上的索引和触发器也会被重新命名。
SQL>select INDEX_NAME from user_indexes where table_name='GJJ_TEST';
INDEX_NAME
--------------
BIN$wgFf1rfqTHqFiyLpP1+Fxw==$0
SQL>flashback table gjj_test to before drop;
可以发现gjj_test已恢复正常,但是索引和触发器的名字并没有被改过来,只能通过alert index ..rename更改。
但位图索引不会放到recylebin中,所以无法恢复。
如果想DROP TABLE比较彻底,可以用drop table gjj_test purge。
页:
[1]