在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之前的数据。