行业资讯 2025年08月6日
0 收藏 0 点赞 968 浏览 2047 个字
摘要 :

文章目录 Oracle数据库update或误删除提交后恢复方法 认识flashback 总结 在进行Oracle数据库操作时往往会因为自己的一时大意导致数据库误操作,比如没写where导致整表……




在进行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.zuozi.net/8117.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号