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

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

    特别说明:

    • 删库需谨慎,做好备份,测试环境可以浪,正式环境不建议做这种操作,且必须备份,可以定时备份。
    • 删库之后如果按照上述方式不通,不要做其他多余操作,可能因为多余操作导致彻底找不回数据。
    • 不要动不动就跑路,稳住神儿,总会有解决办法的。
  • 相关阅读:
    【Vue】Vue开发实战之我的笔记(ch18-ch27)--20221115
    郑州大学图书馆许少辉《乡村振兴战略下传统村落文化旅游设计》中文文献——2023学生开学季辉少许
    进制转换【二进制、八进制、十进制、十六进制】
    电脑监控软件内网版和外网版哪个好?
    LLVM TableGen 系统学习笔记
    laravel的默认首页怎么改-laravel框架默认欢迎页面如何修改
    钙尔奇30周年以行动,力挺中国骨骼健康发展
    java抽象类(强制子类重写全部)
    【数据结构-oj】顺序表和链表的 oj 题(入门)
    springboot参数校验的三种方式
  • 原文地址:https://blog.csdn.net/weixin_43241706/article/details/125485676