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

谁践踏了优雅 2022-12-17 01:26 356阅读 0赞

Oracle数据误删快速恢复

文章目录

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

1、创建测试数据

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

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

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

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

3、数据已提交

  1. delete from cctest1 where id=1;
  2. 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;

  1. alter table cctest1 enable row movement;--开启行移动功能
  2. flashback table cctest1 to scn 590243649; --上一步找到的scn
  3. 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、恢复数据

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

在这里插入图片描述


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

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

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读