Oracle drop删表后的数据恢复

!!!芭比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过一次表啊,果断执行,然后成了!!!!!心情就是这样的:
在这里插入图片描述

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

特别说明:

  • 删库需谨慎,做好备份,测试环境可以浪,正式环境不建议做这种操作,且必须备份,可以定时备份。
  • 删库之后如果按照上述方式不通,不要做其他多余操作,可能因为多余操作导致彻底找不回数据。
  • 不要动不动就跑路,稳住神儿,总会有解决办法的。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰红茶不会渴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值