12c In-Database Archiving

来源:互联网 发布:淘宝怎么设置最低折扣 编辑:程序博客网 时间:2024/05/21 17:21

为准备12c ocp升级考试

12c建议把历史数据也放置到在线的数据库中,可参考12c的ILM和VLDB部分。

In-Database Archiving可以把表中的行标记为inactive,从而达到对此行进行archive的目的。

数据库可以对inactive的数据进行压缩,对于应用来说这些inactive的数据也是不可见的。通过此特性,在单个数据库中可以支持存储更长历史时长的数据

 

要启用此特性,我们在创建表时必须加上row archival,数据库会自动为新创建的表添加ORA_ARCHIVE_STATE隐藏列。

并且,数据库通过一个会话级参数row archival visibility来控制inactive的数据是否可见。如下

 

SQL> alter session set row archival visibility=active;

Session altered.

SQL> create table test2(id number,name varchar2(12))row archival;

Table created.

SQL> desc test2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(12)

SQL> insert into test2 values(1,'tom');

1 row created.

SQL> insert into test2 values(2,'mary');

1 row created.

SQL> commit;

Commit complete.

SQL> col column_name for a20
SQL> select column_name,hidden_column from user_tab_cols where table_name='TEST2';

COLUMN_NAME          HID
-------------------- ---
ORA_ARCHIVE_STATE    YES
ID                   NO
NAME                 NO

SQL> col ORA_ARCHIVE_STATE for a20
SQL> select id,ORA_ARCHIVE_STATE from test2;

        ID ORA_ARCHIVE_STATE
---------- --------------------
         1 0
         2 0

SQL> update test2 set ORA_ARCHIVE_STATE=1 where id=2;   

 ----Insert a value into ORA_ARCHIVE_STATE to set inactive

1 row updated.

SQL> select id,ORA_ARCHIVE_STATE from test2;

        ID ORA_ARCHIVE_STATE
---------- --------------------
         1 0

SQL> alter session set row archival visibility=all;

Session altered.

SQL> select id,ORA_ARCHIVE_STATE from test2;

        ID ORA_ARCHIVE_STATE
---------- --------------------
         1 0
         2 1