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

Oracle 11gR2 Flashback

abaoDiary 2016-08-04
265


事情时这个样子的:上个月一天下午同事突然找我说能给恢复一下正式库吗?当时我就头都大了,因为我们的数据库只有逻辑备份,而且是工作时间。和同事交流了一下,发现实际情况是业务上误删了数据,需要恢复数据。期间业务人员还手工补了数据,第一次闪回查询由于业务人员给说的时间不对,没有还原正确的数据,反而是给手工补的数据给恢复了。


create table test2 as 

select * from xxxx

as  of timestamp to_timestamp('2016-07-14 14:00:00', 'yyyy-mm-dd hh24:mi:ss');


select * from test2 a 

where not exists (select 1 from xxxx b where a.PK_ACCSUBJ = b.PK_ACCSUBJ )


insert into xxxx

select * from test2 a 

where not exists (select 1 from xxxx b where a.PK_ACCSUBJ = b.PK_ACCSUBJ )


下边记录一下Oracle的flashback的一些功能和自己的测试步骤

一。Flashback功能的前提准备

1.数据库必须在归档模式下


2.初始化参数

两个初始化参数,db_recovery_file_dest 闪回恢复区路径,db_recovery_file_dest_size 闪回恢复区大小;必须先设置大小,在设置路径


3.数据库开启闪回功能





二。Oracle 11g 的闪回

Oracle闪回功能分为:闪回数据库,闪回删除,闪回表,闪回查询,闪回版本,闪回数据归档,闪回事物处理


  1. 闪回删除

创建测试表空间,用户和表

create tablespace test datafile '/u01/app/oracle/oradata/orcl/test.dbf' size 100m;

create user hdb identified by hdb default tablespace test;

grant dba to hdb;

create table test1 as select * from dba_objects;    

查看回收站


Drop表


再次查看回收站


可以看到drop表后,表在回收站里了,此时表的空间立马释放,可以使用,如果此时清理了回收站或者覆盖了回收站,就无法再闪回了。另外在回收站里的数据遵循先进先出原则。

闪回删除


2.闪回表

此时需要开启表行迁移


delete表


闪回表



3.闪回查询

最上边实际处理问题时使用的就是闪回查询功能,这里不再重复。


4.闪回版本

新建表test2,插入记录,修改ID





使用flashback versions query,可以看到对表的执行什么操作(i or u)以及数据的变更。可以通过timestamp和scn查询

select versions_starttime ,versions_endtime,versions_xid,versions_operation,

id,name

 from test2 versions between timestamp minvalue and maxvalue 

  order by versions_starttime;



5.闪回数据归档

继续使用上边的test1表测试

注意:此处必须用sys用户设置

查看执行计划,可以看到是从表SYS_FBA_HIST_89874取数


关闭闪回归档



6.闪回事物处理

首先需要打开数据库的补充日志



然后执行undo_sql里的语句,完成闪回事物处理,可以看到,我们是3条insert语句和一条update语句,undo_sql语句对应的就是一条update语句和3条delete语句


7.闪回数据库

闪回数据库到scn2153825

使用resetlogs打开数据库,查看表test2




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

评论