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

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

    特别说明:

    • 删库需谨慎,做好备份,测试环境可以浪,正式环境不建议做这种操作,且必须备份,可以定时备份。
    • 删库之后如果按照上述方式不通,不要做其他多余操作,可能因为多余操作导致彻底找不回数据。
    • 不要动不动就跑路,稳住神儿,总会有解决办法的。
  • 相关阅读:
    Spider爬虫入门(发送Get Post请求、携带请求头、Cookie、Session、响应Response、获取二进制数据 、解析Json数据)
    ROG玩家国度主板支持内存的部分型号牌子介绍
    GUAVA本地缓存01_概述、优缺点、创建方式、回收机制、监听器、统计、异步锁定
    相控阵雷达天线不同阵列的特性matlab仿真分析——有限扫描阵,稀疏阵,多波束阵,共形阵
    深度学习之激活函数——Leaky ReLU
    MybatisPlus实现多表联查
    第二章《Java程序世界初探》第2节:常量的使用
    2023-11-06 思考-日记
    c/c++内存管理
    易错知识点3
  • 原文地址:https://blog.csdn.net/weixin_43241706/article/details/125485676