今天因为操作失误误删了一个表中的部分数据,在没有数据备份且不会挖掘日志的情况下,感觉有点头大。幸好oracle提供了一种快照的方式,可以找回被删除的数据,在这里记录下 我找回数据的过程。

1.首先确定下删除数据的时间点,如果不确定准确的时间,也可用你知道的数据删除之前的时间点,不过这样在你使用的时间和你删除数据的时间点之间如果数据不一致,可能导致你找回的数据不全。

我删除的时间是2018-09-28 11:30:00到2018-09-28 11:34:00之间,因为不确定具体时间,我选择2018-09-28 11:30:00,而且之间我没有进行其他的(除这次删除外)数据插入和删除操作,所以通过这个时间点找回的数据不会存在不全的情况

2.然后找导删除的数据:

 select * from AT_PP_WORKINSTRUCTION as of timestamp to_timestamp('2018-09-28 11:30:00', 'yyyy-mm-dd hh24:mi:ss') where   Inst_Name_s like 'GL6%';

通过这个sql:select * from 删除数据的表名  as of timestamp to_timestamp('删除数据之前的时间点', 'yyyy-mm-dd hh24:mi:ss') 找到你删除之前的数据,然后加上删除的条件,例如where   Inst_Name_s like 'GL6%' 找到删除的数据

3.将删除的数据插入到被删除数据的表

  insert into AT_PP_WORKINSTRUCTION (select * from AT_PP_WORKINSTRUCTION as of timestamp to_timestamp('2018-09-28 11:30:00', 'yyyy-mm-dd hh24:mi:ss') where   Inst_Name_s like 'GL6%')

数据恢复。

注意:使用insert要保证主键不会重复

如果主键重复,或者插入失败可以说使用下面的方法:

--开启行移动功能 

 ·alter table 表名 enable row movement

 --恢复表数据
 ·flashback table 表名 to timestamp to_timestamp(删除时间点','yyyy-mm-dd hh24:mi:ss')

 --关闭行移动功能 

 ·alter table 表名 disable row movement

 

这里补充点如果删除了整张表该如何恢复:

首先介绍下原理,使用drop删除表时,这张表会进入oracle回收站,如果需要恢复,之间从回收站还原就好了

1. flashback table 里查询被删除的数据表

select * from recyclebin order by droptime desc

2. 执行表的恢复

flashback table '需要恢复的表名' to before drop

 

参考文章:https://blog.csdn.net/qiuzhi__ke/article/details/78740943

                 https://www.cnblogs.com/hqbhonker/p/3977200.html

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐