误删数据的前因后果一大堆就不描述了……

  总计删除6条 售后服务处理单,4条销售退货单,下面记录一下数据恢复的过程:

1.

  首先明确我删除记录的两个表分别为:销售退货单(M_RET_SALE)、售后服务处理单(AP_V_RESERVICES),需要注意的是 售后服务处理单 是一个视图(视图本身并不存储数据,视图表中的数据都是来源于基表,所以我虽然使用的delete from 删除语句从视图表中删除了数据,但是实际上是删除了基表中的数据,如果我想恢复视图表数据,实际上只要恢复了基表的数据之后,视图表中的数据自然就出来了),下面我先恢复 AP_V_RESERVICES视图表的基表AP_SERVICES中的数据,把他的数据恢复了视图表的数据就回来了

根据删除条件找到我进行删除操作的时间点(找到删除视图的时间,就相当于找到了删除AP_SERVICES基表数据的时间):

select sql_text,first_load_time,last_load_time from V$SQL where sql_text like '%delete from AP_V_RESERVICES%';

(正好6条delete数据,正是我删除的记录)
记一次Oracle数据库数据找回的过程_Oracle
2.

  根据删除的时间点,查询删除时间点前,该表中的数据(根据上面6个delete数据来看,最先删除的那条记录的时间是:2020-10-27 16:35:51,所以该时间点前,即将删除的6条记录都应该在表中):

select * from AP_SERVICES as of timestamp to_timestamp('2020-10-27 16:35:50','yyyy-mm-dd hh24:mi:ss') ;

记一次Oracle数据库数据找回的过程_Oracle_02

也就是说,上图中查出来的数据中,有我即将要删除的那条数据,根据该条数据和其他表的关联关系找到这条数据的独有特征是:DOCNO字段中包含有 PSP2010000078 字符串,所以我要具体找到这条数据可以添加搜索条件:

select * from AP_SERVICES as of timestamp to_timestamp('2020-10-27 16:35:13','yyyy-mm-dd hh24:mi:ss') where docno='PSP2010000044';

找到了该条记录:
记一次Oracle数据库数据找回的过程_Oracle_03

3.
  将该条记录复制为 Insert 语句,再重新插入回AP_SERVICES,就ok了,以此方法,将基表中删除的记录都恢复回来。