ITPub博客

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

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

原创 Linux操作系统 作者:realkid4 时间:2011-09-08 22:47:53 0 删除 编辑

 

Flashback ArchiveOracle 11g推出的具有针对性和强制性的数据透明归档技术。本篇我们集中介绍与该特性相关的权限和DDL操作问题。

 

 

9Flashback Archive相关权限

 

Oracle一个新特性的推出,经常伴随着一系列新的权限集合的确立。Flashback Archive组件相关的有两个系统权限,分别为flashback archiveflashback archive administrator

 

从上面的scott用户的情况中,我们可以看到flashback archive系统权限的作用。 就是通过对数据表和已经建立的flashback archive建立关系,开启闪回归档功能。

 

 

SQL> conn scott/tiger@ora11g;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> alter table t flashback archive flar1;

 

alter table t flashback archive flar1

 

ORA-55620: 无权使用闪回归档

 

--切换到sys用户上

SQL> grant flashback archive on flar1 to scott;

Grant succeeded

 

SQL> alter table t flashback archive flar1;

Table altered

 

 

但是,只拥有flashback archive权限的用户,对视图dba_flashback_xxx系列获取到的结果是不准确的。

 

 

SQL> select owner_name, flashback_archive_name from dba_flashback_archive;

 

OWNER_NAME                     FLASHBACK_ARCHIVE_NAME  

------------------------------ -------------------------

 

SQL> select table_name, owner_name from dba_flashback_archive_tables;

 

TABLE_NAME           OWNER_NAME                         

-------------------- ------------------------------ --------------------------------

 

 

对只拥有flashback archive系统权限的用户而言,只能去查找user_xxx相关视图。

 

 

SQL> select owner_name, flashback_archive_name from user_flashback_archive;

 

OWNER_NAME                     FLASHBACK_ARCHIVE_NAME      

------------------------------ ------------------------

SYS                            FLAR1                    

 

 

另一个与flashback archive相关的系统权限是flashback archive administrator,拥有这个权限的用户可以执行下列操作类型:

 

ü        Create flashback archive xxx tablespace yyy quota xx retention zzz; 创建闪回归档区,设置空间限制;

ü        Alter flashback archive xxx 进行清理purge等操作;

ü        Drop flashback archive xxx删除指定的闪回归档空间;

 

 

SQL> conn sys/oracle@ora11g as sysdba;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> grant flashback archive administer to scott;

Grant succeeded

 

SQL> conn scott/tiger@ora11g;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> select * from dba_flashback_archive_tables;

 

TABLE_NAME  OWNER_NAME                     FLASHBACK_ARCHIVE_NAME           

------------------------------ ------------------------------ -----------------------------------

T                              SCOTT                          FLAR1                         

 

SQL> create flashback archive flar2 tablespace mytest retention 1 year;

Done

 

SQL> ALTER FLASHBACK ARCHIVE flar2 PURGE ALL;

Done

 

SQL> drop flashback archive flar2;

Done

 

 

如果取消了这个系统权限,那么相关的系列操作就不能进行。

 

 

SQL> revoke flashback archive administer from scott;

Revoke succeeded

 

SQL> create flashback archive flr2 tablespace mytest retention 1 year;

create flashback archive flr2 tablespace mytest retention 1 year

 

ORA-55612: 无权管理闪回归档

 

 

注意,并不是只有显示拥有flashback archive administrator权限的用户才能Create/alter/drop archive flashback操作。如果用户是dba角色,也可以实现这个目标。

 

 

SQL> conn sys/oracle@ora11g as sysdba;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as SYS

 

SQL> grant dba to scott;

Grant succeeded

 

SQL> conn scott/tiger@ora11g ;

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

SQL> create flashback archive flr2 tablespace mytest retention 1 year;

Done

 

 

 

10flashback archiveDDL操作

 

Flashback Archive是保证对数据表进行DML操作时,数据前后镜像都能保存找回的技术。那么,如果一个数据表加入flashback archive之后,进行DDL操作有什么影响呢?我们分别进行试验。

 

ü        数据列添加add实验

 

对已经加入flashback archive的数据表添加一个数据列。

 

 

SQL> alter table t add m varchar2(10);

Table altered

 

 

直观感觉没有什么区别,就是添加数据列的速度要慢很多。此时,我们检查相关的数据表。

 

 

SQL> select * from sys_fba_ddl_colmap_88294;

 

  STARTSCN     ENDSCN XID  OPERATION COLUMN_NAME   TYPE                HISTORICAL_COLUMN_NAME

---------- ---------- ----- --------- -------------- -------------------- --------------------

  13395717                  OWNER         VARCHAR2(30)        OWNER

(篇幅原因,有省略……

  13395717             EDITION_NAME  VARCHAR2(30)        EDITION_NAME

  13424840             M             VARCHAR2(10)        M

 

16 rows selected

 

 

数据表基表sys_fba_ddl_colmap_88294记录了数据字段变化起效的时间范围(也就是scn范围)。从刚才添加数据列的情况看,数据表中说明从scn=13424840开始,添加起效了数据列m

 

ü        数据列修改

 

修改一个数据列属性。

 

 

SQL> alter table t modify m varchar2(20) ;

 

Table altered

 

SQL> select * from sys_fba_ddl_colmap_88294;

 

  STARTSCN     ENDSCN  COLUMN_NAME         TYPE          HISTORICAL_COLUMN_NAME

---------- ----------  ----------------- ---------------- ----------------------

  13395717             OWNER               VARCHAR2(30)  OWNER

   13395717            EDITION_NAME       VARCHAR2(30)  EDITION_NAME

  13424840   13427266  M_13427266_M        VARCHAR2(10)  M

  13427266             M                  VARCHAR2(20)   M

 

17 rows selected

 

 

对于一个数据列修改,Oracle flashback archive将其视为删除列后重新添加。

 

ü        Truncate table

 

数据表的truncate操作是一个典型的DDL操作,具有flashback archive特性的数据表是否可以truncate操作呢?

 

 

SQL> truncate table t;

Table truncated

 

SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 10:45:49','yyyy-mm-dd hh24:mi:ss');

 

  COUNT(*)

----------

        17

 

 

ü        删除数据列

 

对一个数据列进行删除操作,flashback archive数据表同样支持。

 

 

SQL> alter table t drop column m;

Table altered

 

SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 10:45:49','yyyy-mm-dd hh24:mi:ss');

  COUNT(*)

----------

        17

 

SQL> select count(*) from t;

  COUNT(*)

----------

         0

 

 

此时,在sys_fba_ddl_colmap_88294中会记录上删除记录。

 

SQL> select STARTSCN,ENDSCN,COLUMN_NAME from sys_fba_ddl_colmap_88294;

 

  STARTSCN     ENDSCN    COLUMN_NAME      

---------- ---------- ---------------- -

  13395717               OWNER             

  13395717               NAMESPACE       

(篇幅原因,有省略。。。。。。)

  13395717               EDITION_NAME  

  13424840   13427266    M_13427266_M    

  13427266   13428271    D_13428271_M   

 

17 rows selected

 

 

ü        Drop删除数据表

 

drop数据表操作,flashback archive数据表是不支持的。

 

 

SQL> drop table t;

 

drop table t

 

ORA-55610: 针对历史记录跟踪表的 DDL 语句无效

 

 

要想删除数据表,则需要首先使用alter table xxx no flashback archive;语句进行历史数据归档跟踪关系的解除。之后才能进行删除。

 

11、结论

 

数据归档、offline是很多系统都需要有的特定需求。我们经常遇到这样的需求:将历史数据保留几个月或者几年待查。待查的情景是很少,但是我们如果从应用入手,就需要设计额外的数据表和业务处理流程。其中一个更麻烦的就是保留期过删数据的操作,相对较为复杂。

 

Flashback archiveOracle可以使用在生产系统中直接使用的归档功能组件。如果开发设计使用这个组件进行归档,有若干个好处。

 

首先是透明化的归档操作,用户不需要去关心进行归档的业务逻辑。只要设置好了需要归档的数据表,按照查询归档语法进行查找。就可以实现应用系统中最典型的归档查询需要。

 

其次是高效存储个性。在flashback archive中,数据是保存在内部分区压缩表中,各方面的属性由Oracle进行控制管理。

 

最后是保留期管理严格化。设置不同的flashback archive retention period,首先可以对不同的数据表适应使用不同的保留期。当数据超期之后,Oracle自动进行数据删除工作,不需要用户进行干预。

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

请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7676719