本文共 2724 字,大约阅读时间需要 9 分钟。
Oracle的Flashback Drop闪回删除功能给出我们一种误DROP删除表的便捷恢复方式,实现这种功能的原理是Oracle的“回收站”(RecycleBin)功能。注意,如果被删除的表原先是存放在SYSTEM系统表空间上,则不支持此功能。 1.Flashback Drop功能 恢复被错误drop掉的表。当一张表被删除后,依然可以查看被drop表的内容,是通过查看回收站中的内容实现的。 2.实现原理 被删除的表将被存在一个叫recyclebin回收站的地方,当drop掉表后,实际上就是将改表改了个名字。 3.与回收站有关的视图 DBA_RECYCLEBIN USER_RECYCLEBIN RECYCLEBIN 4.显示当前用户曾经被drop掉的表简短信息 SQL> show recyclebin 5.清除回收站内容的条件 1)表空间不足 2)用户的空间配额不足 3)purge命令 4)使用flashback命令恢复表后,与之对应的回收站中的那条记录内容被清除。 6.Flashback Drop语法 SQL> FLASHBACK TABLE flash TO BEFORE DROP; SQL> FLASHBACK TABLE "BIN$SHP/9O8THArgUym0qMC6vw==$0" TO BEFORE DROP; 上面两种方法都可以实现找回被删除表的功能。第一种方法是恢复到最后一次被删除的状态;第二种方法则可以对回收站中具体的一个对象进行闪回,用于一张表被多次删除后的恢复场景。 7.Flashback Drop 闪回删除功能实践 1).创建测试表flash SQL> create table flash as select * from all_objects; Table created. SQL> select table_name from user_tables where table_name='FLASH'; TABLE_NAME -------------------------------------------------------------------------------- FLASH 2).drop 掉flash表 SQL> drop table flash; Table dropped. 3).查看回收站,这里可以看到flash表已经在回收站中了 SQL> show recyclebin ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- FLASH BIN$SHP/9O8THArgUym0qMC6vw==$0 TABLE 2017-02-14:08:54:01 4).查询该表 SQL> select count(*) from "BIN$SHP/9O8THArgUym0qMC6vw==$0"; COUNT(*) ---------- 88859 5).闪回被drop掉的表 SQL> flashback table flash to before drop; Flashback complete. SQL> select table_name from user_tables where table_name='FLASH'; TABLE_NAME -------------------------------------------------------------------------------- FLASH SQL> show recyclebin 注意:这里在能确认回收站中哪个是要恢复的表时,也可以使用下面的命令进行恢复。 SQL> drop table flash; Table dropped. SQL> show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- FLASH BIN$SHP/9O8aHArgUym0qMC6vw==$0 TABLE 2017-02-14:08:55:52 SQL> flashback table "BIN$SHP/9O8aHArgUym0qMC6vw==$0" to before drop; Flashback complete. SQL> select table_name from user_tables where table_name='FLASH'; TABLE_NAME -------------------------------------------------------------------------------- FLASH SQL> show recyclebin 至此,被删除的flash表被顺利的恢复回来。 8.清除回收站内容的方法 1)该步骤要谨慎执行,一定要确认回收站里的内容可以清楚,否则一旦清楚回收站,怎表就不能闪回回去了 SQL> purge recyclebin; Recyclebin purged; SQL> purge user_recyclebin; Recyclebin purged. 2).清除指定表空间test的回收站 SQL> purge tablespace test; Tablespace purged. 3).清除指定表空间test,同时指定用户test的回收站 SQL> purge tablespace test user test; Tablespace purged. 4)清楚回收站中所有的内容(sys用户执行) SQL> purge dba_recyclebin; DBA Recyclebin purged. 9.不产生回收站数据的同时drop表方法 使用之前一定要慎重 SQL> drop table flash purge; Table dropped. 10.总结 在使用Flashback Drop闪回删除功能之前要充分了解此项功能的实现原理,以及使用此项功能的条件和它的限制条件。闪回删除功能为我们提供了表被误DROP后的便捷恢复手段。转载地址:http://tkhji.baihongyu.com/