!!!芭比Q了啊!!
近期做了一次系统迁移,将测试环境的系统由Windows迁移到Centos上面,先迁应用再迁前端(前后端分离的),安装各种应用巴拉巴拉,最后到迁移数据库了,系统用的是Oracle数据库,先将原来数据库导出一份dmp文件来,然后将dmp导入新的数据库。听起来没毛病,很easy。
BUT!!!
迁移数据库过程中将其它库的表从navicat中全选后删除了!!!就是这样:
一定要看清楚是哪个schema的再删除!!!!!
删除之前一定要备份,导出个dmp文件:exp abc/abc@ORCL file=d:/test.dmp full=y;abc/abc@ORCL 是用户名/密码@数据库名,file=d:/test.dmp 是导出的路径,full=y 是导出全库。
好的,假设你没有备份并且把表都给drop了,咋搞?
数据恢复方法的原理是因为oracle数据库在删除表时会将删除信息存放于某虚拟“回收站”中而非直接清空,再此种状态下数据库标记该表的数据库为“可以复写”,所以在该块未被重新使用前依然可以恢复数据。该方法多用于drop删除。
首先需要查询user_table视图找到被删除的表:
· select table_name,dropped from user_tables
· select object_name,original_name,type,droptime from user_recyclebin
注意此时的表名称已经被重新命名,table_name和object_name就是回收站中的存放表名。
以上两个sql都没查到,按照时间查询也没查到。
跑路?!(测试环境严格来说不至于,之前有个一个月之前的备份)
然后就百度,在这里感谢一下百度。。。虽然我们不能做百度型程序员,但是不百度是做不到的啊
如果管理员此时可以明确原表的名称或者原表只DROP过一次表,执行如下sql:
flashback table 原表名 to before drop;
如果不知道原表名称或者曾经DROP过多次表,可以直接按照回收站中的表名称将数据恢复,执行如下sql:
flashback table “回收站中的表名(如:Bin$DSbdfd4rdfdfdfegdfsf==$0)” to before
drop rename to 新表名;可以通过以上两种方式恢复数据。
定眼一看,这符合第一条的情况啊,明确表名+只drop过一次表啊,果断执行,然后成了!!!!!心情就是这样的:
万花齐放,万马奔腾啊有木有。
特别说明: