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

 

你可能感兴趣的:(oracle数据库数据误删除恢复方法)