闪回之 Flashback Data Archive
背景:
Oracle 11g 中 Flashback Data Archive 特性。将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和 undo 区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响 undo 策略。并且可以根据需要指定哪些数据库对象需要保存历史变化数据,而不是将数据库中所有对象的变化数据都保存下来,而只是记录了指定表的数据变化。所以,Flashback Data Archive 是针对对象的保护,是 Flashback Database 的有力补充。
闪回数据归档区:
闪回数据归档区是闪回数据归档的历史数据存储区域,每一个闪回数据归档区都可以有一个唯一的名称,对应了一定的数据保留策略。
在一个系统中,可以有一个默认的闪回数据归档区,也可以创建其他许多的闪回数据归档区域。
Flashback archive 的限制条件:
1)Flashback data archive 只能在 ASSM 的 tablespace 上创建
2)Flashback data archive 要求必须使用自动 undo 管理,即 undo_management 参数为 auto
Flashback archive 的后台进程:
Oracle11g 为 Flashback data archive 特性专门引入了一个新的后台进程FBDA,用于将追踪表(traced table,也就是将指定使用 flashback data archive 的table)的历史变化数据转存到闪回归档区。
-- 查看 FDBA 进程
SQL> select name,description from v$bgprocess where name='FBDA';
NAME DESCRIPTION
----- -----------------------------------------------------------
FBDA Flashback Data Archiver Process
FDA 管理操作:
--创建一个默认的 Flashback Archive, 配额为 10M,数据保留期为 7 天
SQL> create flashback archive default fda01 tablespace fda01 quota 10M retention 7 day;
--创建一个默认的 Flashback Archive,配额 unlimited,数据保留期为 7 天
SQL> create flashback archive fda02 tablespace fda02 retention 7 day;
(配额 unlimited,用户对该表空间的配额也必须为 ulimited)
若配合不够,则修改用户配额。 -> SQL> grant unlimited tablespace to XXXX;
--用户赋权
SQL> grant flashback archive administer to andy;
--查询 flashback archive 情况
SQL> select flashback_archive_name name, status from dba_flashback_archive;
--修改default flashback archive
SQL> alter flashback archive XXX set default;
--为已经存在的 Flashback Archive 添加表空间,并指定配额
SQL> alter flashback archive XXX add tablespace XXXX quota 100M;
--将表空间从 Flashback Archive 中移除
SQL> alter flashback archive XXX remove tablespace XXX;
--修改已经存在的 Flashback Archive 的配额
SQL> alter flashback archive fla1 modify tablespace XXX quota 30m;
--修改配额不受限制
SQL> alter flashback archive XXX modify tablespace XXX;
--修改 Flashback Archive 的 retention time
SQL> alter flashback archive fla1 modify retention 1 year;
--清空 Flashback Archive 中的所有历史记录
SQL> alter flashback archive XXX purge all;
--清空 Flashback Archive 中超过 1 天的历史数据
SQL> alter flashback archive fla1 purge before timestamp (systimestamp - interval '1'day);
--清空 Flashback Archive 中指定 SCN 之前的所有历史数据
SQL> alter flashback archive fla1 purge before scn XXX;
-- 删除 Flashback Archive 不会删除相应的表空间
SQL> DROP FLASHBACK ARCHIVE XXX;
操作流程:
--创建测试的 FDA 表空间
SQL>
create tablespace fda01 logging datafile '/home/oracle/app/oradata/orcl/fda01.dbf'
size 10m autoextend on next 1m maxsize 30m extent management local;
SQL>
create tablespace fda02 logging datafile '/home/oracle/app/oradata/orcl/fda02.dbf'
size 10m autoextend on next 1m maxsize 30m extent management local;
--创建一个默认的 Flashback Archive, 配额为 10M,数据保留期为 7 天
SQL> create flashback archive default fda01 tablespace fda01 quota 10M retention 7 day;
--创建一个默认的 Flashback Archive,配额 unlimited,数据保留期为 7 天
SQL> create flashback archive fda02 tablespace fda02 retention 7 day;
--查询 flashback archive 情况
SQL> col name for a40
SQL> select flashback_archive_name name, status from dba_flashback_archive;
NAME STATUS
---------------------------------------- -------
FDA01 DEFAULT
FDA02
--创建 table,使用默认的 Flashback Data Archive 来存储历史数据
SQL> create table fad01(id number) flashback archive;
--创建 table,使用指定的 Flashback Data Archive 来存储历史数据
SQL> create table fda02(id number) flashback archive fda02;
在 Flashback Area 中,会有一张历史表记录着我们启动 FA 表的所有操作。 我们可以通过如下 SQL 来查看他们之间的映射关系。
SQL> SELECT table_name,archive_table_name,status from dba_flashback_archive_tables;
--对表启用 Flashback archive,并使用默认的 Flashback archive。
SQL> alter table XXX flashback archive;
--禁用表的 Flashback Archive
SQL> alter table XXX no flashback archive;
--对 table 启用 Flashback archive,并指定 Flashaback Archive 区。
SQL> alter table XXX flashback archive fla1;
针对 FDA 的DDL处理。
启动Flashback Data Archive的表上的一些DDL 操作可能触发ORA-55610的错误,DDL限制:
1)ALTER TABLE statement that includes an UPGRADE TABLE clause, withor without an INCLUDING DATA clause
2)ALTER TABLE statement that moves or exchanges a partition or subpartition operation
3)DROP TABLE statement
说明:
如果必须在已经启用 Flashback Archive 的表上执行这些不支持的 DDL 操作,可以用DBMS_FLASHBACK_ARCHIVE 包将表从Flashback Data Archive 分离出来,待操作结束后在添加进去。
--查询 FDA 的映射关系
SQL> SELECT table_name,archive_table_name,status from dba_flashback_archive_tables;
我们要执行那些不支持的 DDL,就需要用 dbms_flashback_archive 禁用他们之间的映射关系,在操作,操作完在用该包启用他们。
--表的分离和重新结合
SQL> exec dbms_flashback_archive.disassociate_fba('ANDY','FAD01');
SQL> exec dbms_flashback_archive.reassociate_fba('ANDY','FAD01');
Flashback Data Archive 恢复数据的测试流程:
--创建测试的 FDA 表空间
SQL>
create tablespace fda01 logging datafile '/home/oracle/app/oradata/orcl/fda01.dbf'
size 10m autoextend on next 1m maxsize 30m extent management local;
SQL>
create tablespace fda02 logging datafile '/home/oracle/app/oradata/orcl/fda02.dbf'
size 10m autoextend on next 1m maxsize 30m extent management local;
--创建一个默认的 Flashback Archive, 配额为 10M,数据保留期为 7 天
SQL> create flashback archive default fda01 tablespace fda01 quota 10M retention 7 day;
--创建一个默认的 Flashback Archive,配额 unlimited,数据保留期为 7 天
SQL> create flashback archive fda02 tablespace fda02 retention 7 day;
--查询 flashback archive 情况
SQL> col name for a40
SQL> select flashback_archive_name name, status from dba_flashback_archive;
NAME STATUS
---------------------------------------- -------
FDA01 DEFAULT
FDA02
--sys用户赋权
SQL> grant flashback archive administer to andy;
--创建测试表:
SQL> create table fad01(id number) flashback archive;
--插入数据:
SQL> insert into fad01 values(1);
SQL> select count(*) from fad01;
COUNT(*)
----------
1
--查询时间:
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;
TM
-------------------
2015-03-15 05:35:40
在 update 一次数据:
SQL> update fad01 set id=11 where id =1;
SQL>commit;
查询时间:
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;
TM
-------------------
2015-03-15 05:37:25
使用 Flashback Archive 查询 1 分钟之前的数据:
SQL> select count(*) from fad01 as of timestamp (systimestamp - interval '1'minute);
COUNT(*)
----------
0
--删除表数据
SQL> delete from fad01;
SQL> commit;
SQL> select count(*) from fad01;
查询表映射关系
SQL> col TABLE_NAME for a10
SQL> col OWNER_NAME for a10
SQL> col FLASHBACK_ARCHIVE_NAME for a15
SQL> SELECT * from dba_flashback_archive_tables;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHI ARCHIVE_TABLE_NAME STATUS
---------- ---------- --------------- ---------------------------------- ---------------
FAD01 ANDY FDA01 SYS_FBA_HIST_97516 ENABLED
从这个结果,可以看出,在 Flashback archive 对应的 FAD01 表的历史表是 SYS_FBA_HIST_97516 。
该表保存了 FA 表的所有的操作记录:
SQL> select count(*) from SYS_FBA_HIST_97516;
COUNT(*)
----------
2
注意:历史表只能查询,若想修改,必须解除映射关系。
______________________________________________
验证 FDA 与undo无关,新建 UDNO TBS并切换默认 UNDO TBS ,删除旧默认 UNDO TBS
1、创建新的undo表空间undotbs2
create undo tablespace UNDOTBS2 datafile '/home/oracle/app/oradata/orcl/undotbs02.dbf'
size 50m autoextend on next 10m maxsize unlimited extent management local;
2、切换系统表空间
alter system set undo_tablespace=UNDOTBS2 scope=both;
3、删除原来undo内容
drop tablespace undotbs1 including contents and datafiles;
______________________________________________
SQL> select * from fad01 as of timestamp to_timestamp('2015-03-15 05:37:25','YYYY-MM-DD hh24:mi:ss');
ID
----------
11
-- 利用不受限于undo时间的,FDA 与 flashback query恢复误操作。
SQL> insert into fad01 select * from fad01 as of timestamp to_timestamp('2015-03-15 05:37:25','YYYY-MM-DD hh24:mi:ss');
1 row created.
SQL> select * from fad01;
ID
----------
11
-- 删除 FDA 表
SQL> alter table fad01 no flashback archive;
Table altered.
SQL> drop table fad01;
Table dropped.
闪回之 Flashback Data Archive的更多相关文章
- Oracle 闪回归档(Flashback Data Archive)
--检查权限 SELECT * FROM dba_sys_privs WHERE privilege LIKE '%FLASH%'; --设置权限 GRANT dba TO testuser;--设置 ...
- oracle flashback data archive闪回数据归档天坑之XID重用导致闪回查询数据重复
我们有个系统使用了Oracle flashback data archive闪回数据归档特性来作为基于时间点的恢复机制,在频繁插入.更新期间发现SYS_FBA_HIST_NNNN表中的XID被两个事务 ...
- oracle闪回、闪回数据归档Flashback Data Archive (Oracle Total Recall)的真正强大之处、11gR2增强以及合理使用
oracle的闪回很早就出来了,准确的说一直以来应该都较少被真正用户广为使用,除了dba和极少部分开发人员偶尔用于逻辑出错.误删恢复之外,较少被用于产生更有价值的用途. 各种闪回表flashback ...
- flashback data archive (转)
闪回数据归档(Flashback Data Archive) 在Oracle 11g当中,对闪回技术再次进行了扩展,提供了一个全新的flashback方式,称之为闪回数据归档,本节我们将对闪回数据归档 ...
- [每日一题] 11gOCP 1z0-053 :2013-09-29 Flashback Data Archive ...................................6
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12205299 正确答案:A 具体请参考:http://blog.csdn.net/guoy ...
- Flashback Data Archive ( Oracle Total Recall ) introduced in 11g
Flashback Data Archive feature is part of Oracle Total Recall technology. Flashback Data Archive fea ...
- Oracle 闪回特性(FLASHBACK DATABASE)
--===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --======================= ...
- 11G新特性 -- flashback data archive(2)
创建Flashback Data Archive用户需要授予dba或flashback archive administer系统特权.flashback archive administer系统特权包 ...
- 11G新特性 -- flashback data archive(1)
虽然可以依赖undo数据来查询row的旧版本数据,甚至可以执行逻辑恢复.但是你不能期待在undo中找到非常旧的数据.undo数据主要是用来提供读一致性. 在11G中,提供了Flashback Data ...
随机推荐
- debian jessie install note
Debian支持非常多的硬件,包括arm/mips/ppc/x86,于是想安装个Debian看看,也不想总屈服在canonical的ubuntu下面. 光盘镜像太多了 纯社区版的安装总是没有想像得那么 ...
- 计算两个GPS坐标点的距离
计算两个GPS坐标点的距离,第一个参数是第一个点的维度,第二个参数是第一个点的经度 http://yuninglovekefan.blog.sohu.com/235655696.html /** * ...
- JQuery如何获取按键的unicode编码?
$("selector").keyup(function(xxx){ var myEvent = xxx; var code = myEvent.keyCode; alert(co ...
- 扒一扒P2P风控的底牌(转)
互联网金融,这里面水就太深了,能当理财买的一般有两类,一个是货币基金,比如余额宝,这个大家已经十分清楚了,没什么风险, 但问题就是收益越来越低.实在是不过瘾了.而另外一种就是P2P理财了,收益很高,也 ...
- pm2 服务崩溃 Error: bind EADDRINUSE
pm2 服务崩溃 Error: bind EADDRINUSE 发布于 1 年前 作者 zhujun24 2444 次浏览 来自 问答 Error: bind EADDRINUSE 0.0.0 ...
- JQuery中的text(),html()和val()区别
定义和用法 text() 方法方法设置或返回被选元素的文本内容 代码如下 <!DOCTYPE html> <html lang="en"> <head ...
- CSS -- 未解之疑
@.css那些事儿 -- 第9章 反馈表单 自己编写了CSS,可是红框中的横线比下面的要粗.对比作者的代码,发现可能与上面标题h3的height和line-height有关,但是不知道具体是为什么? ...
- 【BZOJ2457】[BeiJing2011]双端队列 贪心+模拟
[BZOJ2457][BeiJing2011]双端队列 Description Sherry现在碰到了一个棘手的问题,有N个整数需要排序. Sherry手头能用的工具就是若 ...
- 几句话搞懂URI、URL、URN之间的关系
1.URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. 2.RL是uniform resource locator,统一资源定位器,它是一种具体 ...
- 九度OJ 1003:A+B
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:15078 解决:6299 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开. 现在请计 ...