EAS_查询分析器中误删数据恢复

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.出现数据误操作后,需立即拿闪回查询的方法进行数据恢复,争取能恢复的时间,不要错过恢复的时机导致不能恢复。

posted @ 2024-01-23 09:27  凉了记忆  阅读(29)  评论(0编辑  收藏  举报