sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 运维DBA >

【学习笔记】oracle Flashback闪回归档 详细研究笔记三

时间:2017-01-08 23:45   来源:Oracle研究中心   作者:网络   点击:

天萃荷净 oracle研究中心学习笔记:分享一篇关于oracle flashback归回归档的研究笔记。

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

9、Flashback Archive相关权限

Oracle一个新特性的推出,经常伴随着一系列新的权限集合的确立。Flashback Archive组件相关的有两个系统权限,分别为flashback archive和flashback 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



10、flashback archive与DDL操作

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 archive是Oracle可以使用在生产系统中直接使用的归档功能组件。如果开发设计使用这个组件进行归档,有若干个好处。

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

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

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

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】oracle Flashback闪回归档 详细研究笔记三

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1457.html

Oracle研究中心

关键词:

oracle Flashback

oracle闪回归档