Oracle drop删表后的数据恢复

!!!芭比Q了啊!!
近期做了一次系统迁移,将测试环境的系统由Windows迁移到Centos上面,先迁应用再迁前端(前后端分离的),安装各种应用巴拉巴拉,最后到迁移数据库了,系统用的是Oracle数据库,先将原来数据库导出一份dmp文件来,然后将dmp导入新的数据库。听起来没毛病,很easy。
BUT!!!
迁移数据库过程中将其它库的表从navicat中全选后删除了!!!就是这样:Oracle drop删表后的数据恢复_第1张图片
一定要看清楚是哪个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都没查到,按照时间查询也没查到。

跑路?!(测试环境严格来说不至于,之前有个一个月之前的备份)
然后就百度,在这里感谢一下百度。。。虽然我们不能做百度型程序员,但是不百度是做不到的啊
Oracle drop删表后的数据恢复_第2张图片

  • 如果管理员此时可以明确原表的名称或者原表只DROP过一次表,执行如下sql:

    flashback table 原表名 to before drop;

  • 如果不知道原表名称或者曾经DROP过多次表,可以直接按照回收站中的表名称将数据恢复,执行如下sql:

    flashback table “回收站中的表名(如:Bin$DSbdfd4rdfdfdfegdfsf==$0)” to before
    drop rename to 新表名;

    可以通过以上两种方式恢复数据。

定眼一看,这符合第一条的情况啊,明确表名+只drop过一次表啊,果断执行,然后成了!!!!!心情就是这样的:

万花齐放,万马奔腾啊有木有。

特别说明:

  • 删库需谨慎,做好备份,测试环境可以浪,正式环境不建议做这种操作,且必须备份,可以定时备份。
  • 删库之后如果按照上述方式不通,不要做其他多余操作,可能因为多余操作导致彻底找不回数据。
  • 不要动不动就跑路,稳住神儿,总会有解决办法的。

你可能感兴趣的:(Oracle,oracle,数据库)