暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 闪回版本(闪回表到指定 SCN)

kk的DBA随笔 2024-11-14
46

1. 创建目录

  1. mkdir /u01/app/oracle/flash

2. 配置 FRA

  1. alter system set db_recovery_file_dest_size=15G;

  1. alter system set db_recovery_file_dest='/u01/app/oracle/flash';

3. 设置闪回参数 -- 确保可以闪回 48h 内的数据库

  1. alter system set db_flashback_retention_target=2880;

4. 开闪回

  1. alter database flashback on;

实践:闪回部分数据

1. 解锁 hr 账户连接数据库

  1. alter user hr identified by hr account unlock;

2. 运行脚本

在这个脚本中,有两个事务,我们尝试保留 insert 的事务,回滚 update 的事务。

  1. conn hr/hr@prod4

  2. insert into departments values(290,'Poduct Sales',114,1800);

  3. insert into departments values(300,'Busses Sales',203,1700);

  4. insert into departments values(280,'Mac Sales',205,1700);

  5. commit;

  6. --update

  7. update departments set department_id=310 where department_id=300;

  8. update departments set department_name='Iphone sales' where department_id=280;

  9. commit;

3. 闪回版本查询

  1. SELECT versions_xid XID, versions_startscn START_SCN,

  2. versions_endscn END_SCN, versions_operation OPERATION,

  3. department_id,department_name

  4. FROM departments

  5. VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE;

可以看到最下面的几行是刚才执行脚本所做的操作。

3. 启用行移动

  1. alter table departments enable row movement;

4. 指定 scn 号闪回表

  1. flashback table departments to scn 2148345;

5. 校验表,发现表已经闪回到想要的时间点

update 操作被回滚了。


文章转载自kk的DBA随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论