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

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

  总计删除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了,以此方法,将基表中删除的记录都恢复回来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值