flashback六大技术之flashback drop
环境: sys@ORCL> select * from v$version where rownum=1; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod sys@ORCL> !uname -a Linux localhost.localdomain 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linux
? ???????? 在oracle 10g引入了recyclebin,对于一个对象的删除,oracle先通过修改数据字典,将其及其关联对象(索引、约束等)重命名,然后放入recyclebin。被删除的对象将占用创建时的同样的空间大小,当出现空间压力时,这个空间才会被慢慢回收。但是当对象被删除之后,这部分空间会计入free space,被看作是自由空间,可重用,在dba_free_space可查。如果能够确认删除对象,则可以使用purge命令完全删除,这样可以减少动态空间回收带来的性能代价。 ? ???????? 每个用户都有属于自己的一个recyclebin。查看recyclebin的方法很多,最常用的是select * from recyclebin;最简单的是show recyclebin。需要注意的是show recyclebin只列出基表,被删除的表的关联对象则不显示。recyclebin里对象的名称也可以被当做普通名称一样使用,唯一区别是,无法被rename。 ? ????????? ● 表空间无足够的空闲空间,并且没有新的空间可作扩展操作 ? ?????????? 清空recyclebin中对象 hr@ORCL> show parameter recyclebin NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ recyclebin string on hr@ORCL> create table tt as select * from jobs; Table created. hr@ORCL> show parameter recyclebin NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ recyclebin string on hr@ORCL> alter session set recyclebin=off; Session altered. hr@ORCL> drop table tt; Table dropped. hr@ORCL> select * from recyclebin; no rows selected
? ??? 2 注意事项 ? ???????????? ① flashback drop不能恢复参照完整性(即主外键关系),恢复之后,该约束为disable状态,需手动处理 ? ??? 3 实验 ?????? ???????? ㈠ 最简单的删除表恢复 hr@ORCL> drop table t2; Table dropped. hr@ORCL> select object_name,original_name from recyclebin; OBJECT_NAME ORIGINAL_NAME ------------------------------ -------------------------------- BIN$yUcFsAG7oGvgQAB/AQAjTg==$0 T2 hr@ORCL> flashback table t2 to before drop; Flashback complete. hr@ORCL> select count(*) from t2; COUNT(*) ---------- 19 hr@ORCL> select object_name,original_name from recyclebin; no rows selected
hr@ORCL> drop table t2; Table dropped. hr@ORCL> create table t2 as select * from jobs; Table created. hr@ORCL> flashback table t2 to before drop; flashback table t2 to before drop * ERROR at line 1: ORA-38312: original name is used by an existing object hr@ORCL> flashback table t2 to before drop rename to t2_recov; Flashback complete. hr@ORCL> select count(*) from t2_recov; COUNT(*) ---------- 19
hr@ORCL> drop table t2; Table dropped. hr@ORCL> alter table t2_recov rename to t2; Table altered. hr@ORCL> drop table t2; Table dropped. hr@ORCL> select object_name,original_name,droptime from recyclebin; OBJECT_NAME ORIGINAL_NAME DROPTIME ------------------------------ -------------------------------- ------------------- BIN$yUcFsAG/oGvgQAB/AQAjTg==$0 T2 2012-09-09:23:47:12 BIN$yUcFsAHBoGvgQAB/AQAjTg==$0 T2 2012-09-09:23:48:42 hr@ORCL> flashback table t2 to before drop; Flashback complete. hr@ORCL> select object_name,droptime from recyclebin; OBJECT_NAME ORIGINAL_NAME DROPTIME ------------------------------ -------------------------------- ------------------- BIN$yUcFsAG/oGvgQAB/AQAjTg==$0 T2 2012-09-09:23:47:12 hr@ORCL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- REGIONS TABLE COUNTRIES TABLE LOCATIONS TABLE DEPARTMENTS TABLE JOBS TABLE EMPLOYEES TABLE JOB_HISTORY TABLE EMP_DETAILS_VIEW VIEW LOGMNR_TEST TABLE BIN$yUcFsAG/oGvgQAB/AQAjTg==$0 TABLE T2 TABLE 11 rows selected. hr@ORCL> drop table t2; Table dropped. hr@ORCL> select object_name,droptime from recyclebin; OBJECT_NAME ORIGINAL_NAME DROPTIME ------------------------------ -------------------------------- ------------------- BIN$yUcFsAHDoGvgQAB/AQAjTg==$0 T2 2012-09-09:23:52:39 BIN$yUcFsAG/oGvgQAB/AQAjTg==$0 T2 2012-09-09:23:47:12 hr@ORCL> flashback table "BIN$yUcFsAG/oGvgQAB/AQAjTg==$0" to before drop; Flashback complete. hr@ORCL> select count(*) from t2; COUNT(*) ---------- 19 hr@ORCL> select object_name,droptime from recyclebin; OBJECT_NAME ORIGINAL_NAME DROPTIME ------------------------------ -------------------------------- ------------------- BIN$yUcFsAHDoGvgQAB/AQAjTg==$0 T2 2012-09-09:23:52:39 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |