利用ORACLE闪回机制,将删除的表闪回回来(对于表的删除,不需要启动数据库的闪回开关,即可从数据库的回收站中找回)
sql>select * from user_recyclebin where DROPTIME >'2010-03-08 09:00:00';--删除时间为字符串,找到误删除的表;
sql >select 'flashback table '||ORIGINAL_NAME||' to before drop;' from user_recyclebin where DROPTIME >'2010-03-08 09:00:00' and type = 'TABLE';--生成闪回表的语句,保存结果1
sql >select 'ALTER INDEX "'||OBJECT_NAME||'" rename to '||ORIGINAL_NAME||';' from user_recyclebin where DROPTIME >'2010-03-08 09:00:00' and type = 'INDEX';--生成将所有索引恢复名字,保存结果2
sql >select 'ALTER TRIGGER "'||OBJECT_NAME||'" rename to '||ORIGINAL_NAME||';' from user_recyclebin where DROPTIME >'2010-03-08 09:00:00' and type = 'TRIGGER';--生成将所有触发器恢复名字,保存结果3
2)所有已删除的表,都进入了ORACLE得回收站(drop table ab01 purge为直接删除不进回收站,停留时间由表空间大小决定,空间不够自动回收),但删除的表,又重新创建了一样的表名,所以不能直接闪回,要先删除这些表
sql >select 'drop table '||ORIGINAL_NAME||' cascade constraint;' from user_recyclebin where DROPTIME >'2010-03-08 09:00:00' and type = 'TABLE';--生成 删除这些新表的结果4
3)执行结果4
4)执行结果1
5) 执行结果2
6) 执行结果3
检查表和索引、数据、触发器,应该基本都恢复了。