oracle数据库误删的快速恢复操作

在生产操作过程中,由于where条件不正确,或功能菜单选择错误,导致数据误删除,造成数据丢失,后悔莫及。其实在短时间内,数据是可以找回来。

在oracle数据库中,对数据进行修改时,oracle首先将数据的原始数据保存到一个回退段中一段时间,一般保留时间为900s,也可以对保留时间进行调整。该参数受undo_retention管理,如将回退时间设置为1800s的语句为:alter system set undo_retention=1800;

注意:undo_retention是oracle的一个软设计,当undo表空间不够用时,新的回退信息将会将未达1800s的回退信息覆盖。为了保证长时间的查询的读一致性以及各种闪回操作,可以通过启用undo表空间的retention guarantee特性,保证只有过期的数据才会被覆盖。启用retention guarantee的sql语句为:alter tablespace undo表空间名 retention guarantee;

如下操作为恢复sms_send_log表由于where条件错误被误删的数据。

1、被删除的数据

detele from tk_bm.sms_send_log where create_date < to_date('2021-10-11 13:50:09','yyyy-MM-dd hh24:mi:ss')  ;

2、查询被删除的数据,发现还在,查询语句为:

select * from sms_send_log as of timestamp to_timestamp('2021-10-11 13:50:09','yyyy-MM-dd hh24:mi:ss') ;

3、建立临时表,存放已删除的数据

create table sms_send_log_bak as select * from tk_bm.sms_send_log as of timestamp to_timestamp('2021-10-11 13:50:09','yyyy-MM-dd hh24:mi:ss') ;

4、开启行移动

alter table sms_send_log enable row movement;

5、执行数据恢复

flashback table sms_send_log to timestamp to_timestamp('2021-10-11 13:50:09','yyyy-mm-dd hh24:mi:ss');

6、关闭行移动

alter table sms_send_log disable row movement;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值