恢复误删除的数据库数据-Oracle

it2024-06-24  41

Oracle数据误删快速恢复

文章目录

1、创建测试数据2、数据未提交【rollback回滚】3、数据已提交3.1、通过scn恢复数据3.2、通过时间恢复数据

1、创建测试数据

--第一步创建测试表 create table cctest1( id int, name varchar2(100), password varchar2(100) ); --第二步插入数据 insert into cctest1 values(1, 'cc1','cc1') ; insert into cctest1 values(2, 'cctest','cctest') ; commit;

2、数据未提交【rollback回滚】

delete from cctest1 where id=1; --还未提交事务

删除后未提交事务,通过rollback进行数据回滚。

3、数据已提交

delete from cctest1 where id=1; commit;--提交事务

3.1、通过scn恢复数据

1、获得当前数据库的scn号

select dbid,current_scn from v$database;     

2、查询当前scn号之前的scn【当前得到的肯定是数据已经删除后的scn号】

select * from cctest1 as of scn 590263812 ; (查看在当前scn号中数据是否存在,当数据存在时通过改sch号恢复数据)

3、恢复数据

flashback table cctest1[表名] to scn 590243649;

alter table cctest1 enable row movement;--开启行移动功能 flashback table cctest1 to scn 590243649; --上一步找到的scn号 alter table cctest1 disable row movement;--关闭行移动功能

注意点:

3.2、通过时间恢复数据

1、查询数据库系统当前时间【注意是数据库系统时间】

select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual;

2、查询某个时间点的数据【该时间点的数据是否是该恢复的数据,需要自行判断】

select * from cctest1[表名] as of timestamp to_timestamp(‘2020-10-21 20:41:58’,‘yyyy-mm-dd hh24:mi:ss’); (如果不是,则继续缩小范围)        3、恢复数据

alter table cctest1 enable row movement;--开启行移动功能 flashback table cctest1 to timestamp to_timestamp('2020-10-21 20:40:58','yyyy-mm-dd hh24:mi:ss'); alter table cctest1 disable row movement;--关闭行移动功能


更多数据恢复手段待完善中,如有问题望指正,谢谢

学习源于网络,实践忠于生活

最新回复(0)