Oracle数据库update或误删除提交后想恢复该怎么操作?

后端 潘老师 2年前 (2021-11-09) 2727 ℃ (0) 扫码查看

在进行Oracle数据库操作时往往会因为自己的一时大意导致数据库误操作,比如没写where导致整表误update或误删除,可能直接导致系统崩溃,那想要恢复之前的误操作数据该如何去做?
Oracle数据库update或误删除提交后想恢复该怎么操作?
写这篇文章,主要是潘老师今天犯了一个影响说大不大但性质还是很严重的错误。

测试人员找我修改下某个表的一些数据方便测试,可我这个粗心呀,写完update语句,就直接执行了,刚执行完就拍大腿了,忘了写where条件了!整个世界崩塌了,显示20000多条数据受影响,没错,整个表数据全部都被误更新了。

由于使用的是Navicat也没有commit和rollback按钮,这些数据已经实实在在地躺在了数据库,查询一看清一色的相同字段值,似乎在赤裸裸地嘲讽着我!最关键的是,测试库数据没有备份!

记录下这该死的语句:

# WHERE被我吃了~
update T_PSP_PLAN set TIME_LIMIT='T4,T8,SP' ,CONTAINER_DES_CODE='755JES',CONTAINER_TIME_LIMIT='T4'

说这次事件影响不大一是因为毕竟是测试库,大不了数据重建,二是因为该表不是核心系统配置表,修改的字段也不是最核心的字段,但性质很恶劣就是反应了自己的粗心,态度不严谨,容易酿成重大事故。好在,保持镇定,假装冷静,开始寻找其他的恢复数据库方法,结果还真找到了,关键也确实实现了数据库的恢复,现在记录在下面:

Oracle数据库update或误删除提交后恢复方法

第一步:

执行查询视图v$sqlarea,找到你操作那条SQL的时间,sql如下:

# sql_text 可以换成你的sql,可模糊查询
select r.FIRST_LOAD_TIME,r.* from v$sqlarea r where sql_text like '%你误操作的sql语句%' order by r.FIRST_LOAD_TIME desc ;

主要是找到你误操作sql的操作时间,即查询出来的第一个FIRST_LOAD_TIME字段值
Oracle数据库update或误删除提交后想恢复该怎么操作?

第二步:

执行下面两条SQL,即可将数据恢复到执行update之前,某某时间之前的数据。

alter table 误操作表名 enable row movement;
# sql误执行时间(我这里向前推了1秒) 比如:2021-11-09 11:36:21
flashback table 误操作表名 to timestamp to_timestamp('sql误执行时间', 'yyyy-mm-dd hh24:mi:ss');

执行成功之后再去查询表数据,惊喜地发现正的恢复了,至于这个时间点之后的数据丢了就丢了,毕竟测试库,恢复的又比较及时,已经算是比较完美了!

认识flashback

一般Oracle数据恢复可以使用备份恢复或者使用日志rollback恢复,不过都比较耗时,而且甚至要停掉Oracle会影响业务正常运行,而提供的另一种恢复手段就是上面我们用的flashback,称为“闪回”,是一种快速数据库恢复机制。
1)Flashback的简单原理
Oracle会将数据库数据的每1个改动记录在日志文件中, 所以理论上依靠日志文件, 是能将数据库回滚到任何一个时间点的,而Flashback的机制有点类似与回收站, 会把数据库改动前的镜像放到undo表空间中.,如果用户要rollback1个数据库对象, 只需要找到undo表空间中对应的Undo数据即可。
2) Flashback的优点
很明显, Flashback并不依赖于日志文件, 只需Undo表空间中undo数据即可发挥作用,所以Flashback可以满足用户逻辑错误的快速恢复。优点如下:

  • 1. 快速
  • 2. 在线恢复, 无需关闭数据库
  • 3. 操作简单,便捷

3) Flashback的缺点
Flashback缺点同样明显.
1. 只适用于用户逻辑错误, 所谓逻辑错误就是用户对数据的误操作, 例如误删除/更新一些数据行等等,而对于数据文件的损坏则无能为力(只能通过日志恢复).
2. undo表空间的容量有限, 旧的undo数据有可能会被新的数据覆盖, 所以Flashback一般只适用于短时间内的恢复, 对于一段相当时间前的误操作, 很可能因为undo数据被覆盖而恢复失败。

另外想要使用flashback还要保证数据库开启了Flashback功能,否则不能使用闪回,具体的就不再展开细说了。

总结

总结经验有以下几点:

  • 执行sql之前最好再确认一遍,保证100%无误后再执行,千万别手速过快
  • oracel数据库操作工具建议使用plsql,可以有commit和rollback按钮,有一次纠错的机会。
  • 数据库一定要做好定时备份
  • 遇事要冷静镇定,不能慌!

好了,以上就是Oracle数据库update或误删除提交后想恢复该怎么操作的全部内容,如果还有什么疑问可以留言评论。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/3946.html
喜欢 (2)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】