在navicat连接oracle时,默认事务是自动提交的。如果在写update语句的忘记加上where条件,导致数据库表的数据全部都修改了,为此我总结了一下在oracle数据库中,通过SQL撤回已经commit的update操作,将数据恢复到执行update语句之前的数据。原理是oracle提供了一种闪回的方法
第一步:
执行如下语句(固定的语句),查询出自己执行的语句,查询时间会比较长:
select r.FIRST_LOAD_TIME,r.* from v$sqlarea r order by r.FIRST_LOAD_TIME desc ;
查询的结果参考:

第二步,执行下面两条语句:
alter table TW_PW_DEV_STATUS enable row movement;
闪回操作前启用行移动功能
flashback table TW_PW_DEV_STATUS to timestamp to_timestamp('2021-01-27 17:45:57', 'yyyy-mm-dd hh24:mi:ss');
其中TW_PW_DEV_STATUS是表的名称
2021-01-27 17:45:57是自己提交update事务的时间,可以将数据还原到update之前的数据。
当使用Navicat连接Oracle并误执行无WHERE条件的UPDATE语句导致大量数据被修改时,可以利用Oracle的闪回功能来恢复数据。首先,查询v$sqlarea以找出执行的更新语句,然后启用行移动功能,再执行闪回语句,指定到更新前的时间点,从而将数据恢复到更新前的状态。这种方法对于防止意外数据修改提供了有效的解决方案。
523

被折叠的 条评论
为什么被折叠?



