误删数据的前因后果一大堆就不描述了……
总计删除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数据,正是我删除的记录)
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') ;
也就是说,上图中查出来的数据中,有我即将要删除的那条数据,根据该条数据和其他表的关联关系找到这条数据的独有特征是: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';
找到了该条记录:
3.
将该条记录复制为 Insert 语句,再重新插入回AP_SERVICES,就ok了,以此方法,将基表中删除的记录都恢复回来。