Oracle误操作--被提交后的数据回退(闪回)
由于一时的粗心,在做update操作时,忘记了加where条件,导致全表数据被修改。此类错误实属不该!!特此记录一下!!
网上搜索Oracle数据回退操作,介绍如下:
闪回级别 | 闪回场景 | 闪回技术 | 对象依赖 | 影响数据 |
数据库 | 表截断、逻辑错误、其他多表意外事件 | 闪回DATABASE | 闪回日志、undo | 是 |
DROP | 删除表 | 闪回DROP | 回收站(recyclebin) | 是 |
表 | 更新、删除、插入记录 | 闪回TABLE | 还原数据,undo | 是 |
查询 | 当前数据和历史数据对比 | 闪回QUERY | 还原数据,undo | 否 |
版本查询 | 比较行版本 | 闪回Version Query | 还原数据,undo | 否 |
事务查询 | 比较 | 闪回Transaction Query | 还原数据,undo | 否 |
归档 | DDL、DML | 闪回Archive | 归档日志 | 是 |
闪回执行步骤:
1.查询最近更新数据之前的数据(以便确定是不是Commit之前的数据)
时间是在最后更新之前的时间,既未做updata操作之前的时间
select * from T_PRODUCT as of timestamp to_timestamp('2019-09-05 11:10:00', 'yyyy-mm-dd hh24:mi:ss');
2.进行闪回操作前需要开启行移动功能
alter table T_PRODUCT enable row movement;
3.执行闪回语句
flashback table T_PRODUCT to timestamp TO_TIMESTAMP(‘2019-09-05 11:10:00′,’yyyy-mm-dd hh24:mi:ss’);
然后数据就回退到更新操作之前了。