Oracle 恢复误删表(drop)原创
金蝶云社区-像孩子一样笑啊
像孩子一样笑啊
13人赞赏了该文章 516次浏览 未经作者许可,禁止转载编辑于2021年08月02日 11:20:13

时间2021年 07月30日周五下午5点时分,

 drop table T_BD_GeneralAsstActType;

简单的三个字母一个标点成了心扑通扑通的开始,已是周五马上放假的心又收了回来。避免被负责人骂(虽然并不会这样,但自己做错的事终究还是羞愧难当),我首先想到的就是寻求恢复表的方法。

第一步:万能的百度

遇事不决先百度,看到诸如此类的博文https://www.cnblogs.com/zzh941210/p/9355370.html后,心中大定。看来恢复一下并不会很困难

简单来说只需要两个步骤

-- 查询删除记录
select * from recyclebin

-- 执行恢复命令
flashback table "需要恢复的表名" to before drop

第二步:连接数据库

这个过程完全是自己摸索

  • XShell连接到服务器

  • sqlplus命令登陆Oracle 数据库

  • 执行  select * from recyclebin;

  • 执行  flashback table "需要恢复的表名" to before drop;

踩坑踩坑,总是有大大小小的坑

  • 找到用户名密码

  • 登陆数据库

sqlplus  用户名  密码

  • 查询

执行select * from recyclebin 时 因为数据量特别大 建议加过滤条件  另外在查询分析器中执行 可以获得较好的查看体验。本来想使用navicat 连接 但是死活连不上 ,因为之前也没怎么操作过Oracle 数据库,实在是还没找到解决办法。

  • 恢复

在sqlplus中执行(查询分析器好像不支持这个命令) flashback命令进行 恢复时 切记 flashback table "需要恢复的表名" to before drop

表名需要使用双引号引起。暂不清楚是否有数据库版本的问题, 另外 表名一定要与 查询出的表名完全一致,大小写也要一致。

总结

世上无难事,只怕有心人。

这次教训虽然发生在测试环境,最最最不济可以从正式环境中将表恢复到测试环境中来,但即便这样 历史数据依旧可能会存在问题。  所以在执行sql语句时一定要万分小心 尤其是 update、delete、drop这样的命令时、 update一定要主要追加条件。

二一个遇事不要慌张,一定有解决问题的方法。一定要多问,多搜索,多思考。


赞 13