1、通过flashback query查询某历史时点的数据量,找到删除时间点的前1s,如 2020-05-13 16:38:07秒钟误删的数据:
select count(*) from t_test as of timestamp to_timestamp('2020-05-13 16:38:06', 'yyyy-mm-dd hh24:mi:ss'); -- 查出5000条数据,查询6s时的数据
select * from t_test as of timestamp to_timestamp('2020-05-13 16:38:06','yyyy-mm-dd hh24:mi:ss') where object_name in ('I_NTAB1','I_NTAB2','I_NTAB3'); --查询6s时的数据,有被删的3条记录 s
elect count(*) from t_test as of timestamp to_timestamp('2020-05-13 16:38:07', 'yyyy-mm-dd hh24:mi:ss'); -- 查出4997条数据,
查询7s时的数据, 可见记录数少了3条,说明数据是在7s时删除的。
2、创建临时表,从删除之前的那一刻恢复所有数据:
create table t_test_0513 as select * from t_test as of timestamp to_timestamp('2020-05-13 16:38:06','yyyy-mm-dd hh24:mi:ss');
3、从恢复的表中把当前表中不存在的记录恢复:
insert into t_test select * from t_test_0513 where object_name not in (select object_name from t_test); commit;
4、数据恢复完成,进行数据验证:
--让现场验证数据无误,并确定没问题时删除临时创建的表。
select count(*) from t_test; --查出5000条数据,跟被删除数据前数据条数一样
select * from t_test where object_name in ('I_NTAB1','I_NTAB2','I_NTAB3'); --被删的三条记录得到了闪回恢复
drop table t_test_0513; --删除闪回用到的中间表t_test_0513
注意:
1.通过EAS Cloud查询分析器上执行的插入、更新、删除操作,是隐式提交的,即自动做了提交。故在执行前一定要确认下语句的WHERE条件是否已写对。另外 建议执行更新、删除数据前,先对操作的表做下备份,以免操作有误可以用备份数据还原。
2.进行数据的更新、删除操作建议不要在EAS Cloud查询分析器中执行,建议在这些工具如PL/SQL developer、TOAD、Oracle Developer工具中执行,执行语句后要点提交或执行commit语句后才会把数据写到数据库中。
3.出现数据误操作后,需立即拿闪回查询的方法进行数据恢复,争取能恢复的时间,不要错过恢复的时机导致不能恢复。
标签:数据恢复,--,timestamp,误删,test,EAS,查询,数据,select From: https://www.cnblogs.com/ketoli/p/17981643