Oracle Flashback闪回是从10g开始推出的一系列技术新特性。闪回Flashback的范围很广泛,包括Flashback Query、Flashback Database、Flashback Transaction和Flashback Drop等。
在之前的Blog系列《使用闪回拯救我们的数据》,笔者已经分析过Flashback闪回的一些特性。Flashback就是在不进行还原操作的情况下,将已经被commit或者ddl操作过的数据恢复过来。
Flashback借用多种技术来实现flashback的目标。Flashback存在一些问题和不适应性。比如:进行flashback的对象时间往往较短,而且不可控。另一方面,flashback的目标没有针对性,对一些不需要进行flashback的数据表,也消耗资源进行flashback准备操作。
在Oracle 11g中,Oracle推出了flashback archive(闪回归档)的新特性。Flashback Archive实现了有针对性数据表的可控时间闪回功能。我们可以设置一块存储空间区域,保留一个特定数据表在不同时间的数据镜像。而且可以设置保留时间,没有达到保留时间的时候,数据都会进行保留。
下面我们通过一系列的实验来说明这些特性。
1、环境准备
我们选择Oracle 11g进行测试,同时建立一个表空间mytest。表空间mytest选择ASSM方式进行segment space management。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> create tablespace mytest datafile size 100m extent management local uniform. size 1m
2 segment space management auto;
Tablespace created
2、创建Flashback Archive空间
Flashback的其他特性,如flashback drop、flashback database,都是数据库的默认选择项目,基本不需要用户进行指定和配置。如果不希望有这些配置项目,则可以通过参数配置开关进行关闭。
Flashback Archive是一种比较特殊的类型,需要我们进行一系列的配置工作。首先,我们在sys用户下创建一个flashback archive存储对象。
SQL> show user;
User is "SYS"
SQL> create flashback archive flar1 tablespace mytest retention 1 year;
Done
创建flar1对象作为使用的flashback archive,存储使用的表空间为mytest,设置的保留年限为1年。
在创建flar1之后,我们可以在dba_flashback_archive、dba_flashback_archive_ts(dba_前缀可以使用user等进行替换)查询到闪回信息。
SQL> select * from dba_flashback_archive;
OWNER_NAME FLASHBACK_ARCHI FLASHBACK_ RETENTION_IN_DAYS CREATE_TIME LAST_PURGE_TIME STATUS
---------- --------------- ---------- ----------------- -------------------- -------------------- -------
SYS FLAR1 1 365 05-9月 -11 11.07.43. 05-9月 -11 11.07.43.
000000000 上午 000000000 上午
SQL> select * from dba_flashback_archive_ts;
FLASHBACK_ARCHI FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB
--------------- ---------- --------------- ----------------------------------------
FLAR1 1 MYTEST
3、设置具有闪回归档功能的数据表
我们转移到scott用户下,进行闪回归档演示。
SQL> conn scott/tiger@ora11g;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
SQL> desc t;
Object t does not exist.
SQL> create table t as select * from dba_objects;
Table created
SQL> select count(*) from t;
COUNT(*)
----------
72226
之后,我们尝试使用alter table xx flashback archive yyy的方法,将数据表与设置的闪回归档区关联上。
SQL> alter table t flashback archive flar1;
alter table t flashback archive flar1
ORA-55620: 无权使用闪回归档
在scott普通用户下,直接调用该命令是被拒绝的。使用设置闪回归档,需要拥有flashback archive系统权限。
--在sys用户下
SQL> grant flashback archive on flar1 to scott;
Grant succeeded
--在scott用户下
SQL> alter table t flashback archive flar1;
Table altered
此时,可以观察到dba_flashback_archive_tables视图的结果,建立了数据表T与flar1的关系。
SQL> select * from dba_flashback_archive_tables;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS
-------------------------- ----------------------------------------------- --------
T SCOTT FLAR1 SYS_FBA_HIST_88294 ENABLED
4、闪回归档数据表
下面,我们分别在不同的时间点,对数据表进行DML操作,演示flashback archive特性。
--大规模DML操作前
SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';
USED MBs
----------
92
SQL> select count(*) from t;
COUNT(*)
----------
113346
SQL> select sysdate from dual;
SYSDATE
--------------------
2011/9/6 9:06:57
--进行大规模DML操作;
SQL> insert into t select * from dba_objects;
72233 rows inserted
SQL> commit;
Commit complete
SQL> select count(*) from t;
COUNT(*)
----------
185579
SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 9:06:57','yyyy/mm/dd hh24:mi:ss');
COUNT(*)
----------
113346
SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';
USED MBs
----------
75
上面的实验,可以清晰的看出Flashback Archive的特点。从query语法上看,flashback archive与flashback query很相像,都是利用指定过去的一个时间点(timestamp,scn)进行查询。但是,flashback query是利用undo的负效应,将没有被覆写的数据返回给用户。这种方式首先是对所有的数据表均有效果,另一个是时间有限,受到undo大小和数据库事务频繁度的影响。
而flashback archive则是将数据归档做到了数据库的层面上。设置一块专门的区域空间,称之为flashback archive。这个区域是真实对应在表空间上可以进行存储使用的。之后设置这块区域的保留时间。
在数据表层面,可以选择需要进行保留的数据表,让其与flashback archive区域关联,这样在存储区域中,就会保留各个时间点的镜像数据。
本篇中研究了如何设置和使用flashback archive,下面我们一起分析研究下设置flashback archive的数据表特征和其他特点。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-706778/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-706778/