Oracle 误删表后数据恢复操作

背景

使用navicat导出数据库脚本文件后,每个表的前面都是 drop 语句,直接把表删了重建。但是这个往往问题很多,在新的用户下,没有这个表执行drop语句会报错,顶多用来做数据备份脚本。
前段时间,想导出sql脚本到新的用户下执行的时候,操作错误,直接在导出sql的用户下执行语句,反应过来的时候已经有部分表被drop了,所以特地学习了一下 oracle 中 drop 语句的数据恢复方法。

oracle数据恢复的原理

oracle在删除表时,不会将全部数据从磁盘上全部去除,而是放置到回收站中

操作步骤

  1. 执行查看全部删除记录语句
select object_name,original_name,type,droptime from user_recyclebin;

object_name是删除表后的表名

这个语句执行之后,可以看到回收站可恢复的删除记录,仔细看被删除的表,先找到自己删除的时间节点,再做筛选操作。

  1. 筛选出自己的删除记录
    时间可以直接复制上面的droptime的字符串
select object_name,original_name,type,droptime from user_recyclebin where droptime >= '2022-9-16 09:00:00';
  1. 如果记得表名,可直接通过表名来恢复
flashback table 原表名 to before drop;
  1. 如果不记得了,可通过object_name来恢复
flashback table "这里是object_name" to before drop rename to 新表名;

直接flashback数据库到某一个时间点

通过上面的操作步骤可以一个表一个表地恢复数据,其实也有直接将数据库闪回到某一时间点的。但是这个执行语句,开发人员不一定有权限。

alter database flashback on;
flashback database to scn tmp_db1;
flashback database to timestamp to_timestamp('2017-6-28 11:30','yyyy-mm-dd hh24:mi:ss');

注意事项

闪回数据时,千万不能新建同名的表然后删除!回收站的记录会被覆盖的!
举例子说明:原先有个名字叫A的表,里面有大量的数据,你突然手抖了,把这个表drop了。你当时没看到这篇文章时,不知道数据可以恢复,自己又建了一个同名的A表。你看到这篇文章后知道可以恢复了,但是前面你在恢复操作时,提示你已经有名称为A的表了,然后这个时候你去把现有的空记录的A表一删,他会把回收站的A表的数据覆盖掉了!你再去恢复的时候,就是你刚删的空记录的A表,你的数据彻底丢失了!

参考文章

链接直达:https://www.cnblogs.com/yfdfj/p/15157224.html

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值