时间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一定要主要追加条件。
二一个遇事不要慌张,一定有解决问题的方法。一定要多问,多搜索,多思考。
推荐阅读