oracle数据库数据误删除恢复方法

一,delete删除,delete删除并commit之后的数据是比较容易恢复的

查看数据库当前的scn号   

select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1203799

查看当前scn号中是否有已删除的数据  ,正常情况下是没有的,已被删除

select count(*) from test as of scn 1203799;

向上查找scn号,直到能查到数据

select count(*) from test as of scn 1203699;

把数据插入到表中commit即可

insert into test select * from test as of scn 1203699;

 

二、比如我们修改了emp表的sal字段

UPDATE scott.emp t
SET t.sal = '9999';

提交之后用下列语句查询获取versions_xid

SELECT versions_xid,empno,ename,sal FROM scott.emp 
VERSIONS BETWEEN SCN minvalue AND maxvalue
WHERE empno='7900';  

根据sal字段的值找到所需的versions_xid,根据versions_xid找到对应的scn号

SELECT operation,start_scn FROM flashback_transaction_query 
WHERE XID=hextoraw('0200040040050000');

执行下列语句恢复

FLASHBACK TABLE scott.emp TO SCN 1979409

此时可能会提示没有打开行移动功能,用下列语句打开即可

alter table scott.emp enable row movement;

值得注意的是此方法用到快速闪回区,如果没有设置回滚段保留的时间,系统默认只能恢复15分钟内修改的数据,可以通过修改undo_retention参数延长保留时间,但是要考虑回滚段大小和dml语句的频率,如果dml频率较高切回滚段空间不足,及时没有达到undo_retention设置的时间,回滚段中的数据也会被覆盖。

三,truncate删除,这个恢复起来比较麻烦,看下大神的回复

https://zhidao.baidu.com/question/239854928645105324.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值