闪回之 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.

时间: 2024-12-08 15:58:09

闪回之 Flashback Data Archive的相关文章

Oracle10g 闪回数据库 (Flashback Database)

生产上要做灾备系统的应急切换演练,灾备端是由OGG搭建的.由于生产库都比较大10多T,不想演练后重新初始化灾备库,生产库版本为10.2.0.4,于是想到10g的新特性flashback database.演练开始前记录一个还原点,演练结束后闪回到这个还原点,重新同步ogg即可. 测试闪加数据库. 一.开启FLASHBACK DATABASE 数据库版本:10.2.0.4 启用FLASHBACK DATABASE数据库必须为ARCHIVELOG模式,还需要有一个闪回恢复区用于存储闪回日志,RAC中

Oracle 闪回特性(FLASHBACK DATABASE)

--===================================== -- Oracle 闪回特性(FLASHBACK DATABASE) --===================================== 闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误,从闪回的方式可以分为基于数据库级别闪回.表级别闪回.事务 级别闪回,根据闪回对数据的影响程度又可以分为闪回恢复,闪回查询.闪回恢复将修改数据,闪回点之后的数据将全部丢失.而闪回查询则可 以查询数据被DML的

PLSQL_闪回删除FlashBack Delete表误删除如何进行恢复(案例)

2014-07-02 BaoXinjian 一.摘要 在PLSQL开发时,有时候会遇到对表中数据的误删除,其实遇到这种情况不需要紧张,如果问题较大,请DBA帮忙,如果只是小问题,只需自己处理,利用flashback闪回操作即可,可可将表进行恢复 在删除中数据时,系统会自动记录一个SCN和时间戳,按SCN和时间戳就可以查询出被误删除的资料 1.SCN 概念 SCN是当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字.Oracle数据库中一共有4种SCN分别为 系统检查点SCN: 系

11G新特性 -- flashback data archive(2)

创建Flashback Data Archive用户需要授予dba或flashback archive administer系统特权.flashback archive administer系统特权包含:create flashback archive,alter flashback archive,drop flashback archive权利. SQL> select * from dba_sys_privs where privilege like '%FLASH%'; GRANTEE

PLSQL_闪回删除FlashBack Drop表误删除如何进行恢复(案例)

2014-06-25 BaoXinjian 一.摘要 在PLSQL开发时,有时候会遇到对表的误删除,其实遇到这种情况不需要紧张,如果问题较大,请DBA帮忙,如果只是小问题,只需自己处理,利用flashback闪回操作即可,可将表进行恢复 在删除表时,系统一般都是表放入回收站中,并没有完全进行删除,因此,只需从回收站中进行恢复就可以了,原理和Window中的回收站一样,但是一旦将回收站中的资料再进行删除,这个就很难恢复了,只能向DBA求救 1. 回收站的概念 回收站,是一个虚拟的容器,用于存放所有

oracle闪回(flashback)的部分实用操作(彻底删除的除外)

一.数据delete并且commit提交之后的闪回 (一):根据时间来恢复:1.查询数据库当前时间(目的是为了检查数据库时间是否与你电脑时间相近,避免时间不同而将数据恢复到错误时间点)select  to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;2.查询删除数据时间点之前的数据select * from 表名 as of timestamp to_timestamp('2018-08-11 16:12:11','yyyy-mm-dd hh2

闪回数据归档(Flashback Data Archive)

转自:http://book.2cto.com/201209/4154.html 闪回查询对撤销数据及参数undo_retention的依赖注定了它们在大事务量的情况下闪回时间窗口将会很小,想要查询数月之前的"旧"数据绝对不可能,但在闪回数据归档面前这并不是不可能的. 闪回数据归档的工作原理是将原本只能保存在UNDO表空间的撤销数据额外的以一种历史表的形式保存在指定的普通表空间(permanent类型的表空间)中.并且不像undo_retention参数那样是个影响整个数据库的设置,闪

Oracle闪回技术(Flashback)

闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口:闪回表.闪回删表能够以表为单位“回到”过去:闪回事务能够以事务为单位“回到”过去:闪回数据库能够以数据库为单位“回到”过去. 一. 闪回表(Flashback Table) 闪回表是利用UNDO表空间的撤销数据,所以能把表闪回到多久之前受到undo_retention,UNDO表空间的数据文件是否启

2.Oracle 闪回特性(FLASHBACK DROP & RECYCLEBIN)

转载自:https://blog.csdn.net/leshami/article/details/6105327 FLASHBACK DROP 特性允许在不丢失任何数据库的情况下将指定的表恢复至其被删除的时间点,并保持数据库为当前状态.闪回删除并不是真正的删除表,而是把该表重命名并放入回收站,类似于Windows的回收站一样.当某个活动对象需要使用该表所占用的空间时,该表才会被真正删除.只要空间未被复用,该表即可恢复.本文主要讲述了FLASHBACK DROP特性以及闪回特性中回收站(RECY