ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Flashback Archive——Oracle闪回归档(上)

Oracle Flashback Archive——Oracle闪回归档(上)

Linux操作系统 作者:haolinhappy 时间:2015-10-08 02:39:44 0 删除 编辑

 

Oracle Flashback闪回是从10g开始推出的一系列技术新特性。闪回Flashback的范围很广泛,包括Flashback QueryFlashback DatabaseFlashback TransactionFlashback 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 dropflashback 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_archivedba_flashback_archive_tsdba_前缀可以使用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视图的结果,建立了数据表Tflar1的关系。

 

 

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 archiveflashback query很相像,都是利用指定过去的一个时间点(timestampscn)进行查询。但是,flashback query是利用undo的负效应,将没有被覆写的数据返回给用户。这种方式首先是对所有的数据表均有效果,另一个是时间有限,受到undo大小和数据库事务频繁度的影响。

 

 

flashback archive则是将数据归档做到了数据库的层面上。设置一块专门的区域空间,称之为flashback archive。这个区域是真实对应在表空间上可以进行存储使用的。之后设置这块区域的保留时间。

 

在数据表层面,可以选择需要进行保留的数据表,让其与flashback archive区域关联,这样在存储区域中,就会保留各个时间点的镜像数据。

 

 

本篇中研究了如何设置和使用flashback archive,下面我们一起分析研究下设置flashback archive的数据表特征和其他特点。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27785870/viewspace-1813445/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-01-04

  • 博文量
    20
  • 访问量
    29922