【12 c】新機能:Oracle 12 c In-Database Archivingデータベース内アーカイブ


通常、アプリケーション開発でテーブルを設計する場合、テーブル内のデータを削除することは避けられません.ハード削除を直接使用すると、削除したデータを効果的に追跡することはできません.ソフト削除を使用する場合(例えばテーブルに削除フラグが追加されたフィールドdelete_flag)は、削除されたフィールドを追跡することができるが、削除されていないデータを使用する場合、delete_flag='N'を加える必要がある.このような削除フラグ付きデータはアプリケーションにとって可視であり、一定の記憶領域を占有する.では、データの削除やアーカイブの方が効率的ですか?
Oracle 12.1.0.1リリースではIn-Database Archiving(データベース内アーカイブ)が導入されています.この新しい機能により、表のデータ行を非アクティブ(Inactive)状態としてマークしてアーカイブすることができます.これらの非アクティブデータ行はアプリケーションでは見えず、圧縮によって最適化できます.
表のIn-Database Archiving(データベース内アーカイブ)を管理するには、表のROW ARCHIVAL(行アーカイブ)を有効にし、表のORA_ARCHIVE_STATE非表示列を操作する必要があります.本編では、In-Database Archivingについて説明します.
1データベースのバージョン
ALEN@PROD2> select * from v$version;



BANNER CON_ID

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

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0

PL/SQL Release 12.1.0.2.0 - Production 0

CORE 12.1.0.2.0 Production 0

TNS for Linux: Version 12.1.0.2.0 - Production 0

NLSRTL Version 12.1.0.2.0 - Production 0

2行アーカイブの有効化
ALEN@PROD2> create table alen(id number,name varchar2(200)) row archival;



Table created.

ロー・アーカイブを有効にすると、テーブルに非表示のカラムORA_が追加されます.ARCHIVE_STATEは、この値が0と1、0はデータがactive、1はデータがinactiveであることを示し、データを挿入する際にその列の値を指定しなければデフォルトでは0となる.
3テーブル構造の表示
ALEN@PROD2> select column_name,data_type,data_length,column_id,segment_column_id, hidden_column from user_tab_cols where table_name='ALEN';



COLUMN_NAME DATA_TYPE DATA_LENGTH COLUMN_ID SEGMENT_COLUMN_ID HIDDEN_COL

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

ORA_ARCHIVE_STATE VARCHAR2 4000 1 YES

ID NUMBER 22 1 2 NO

NAME VARCHAR2 200 2 3 NO

4テストデータの作成と表示
ALEN@PROD2> insert into alen(id,name) values(2,'Lucy');



1 row created.



ALEN@PROD2> commit;



Commit complete.



ALEN@PROD2> select ora_archive_state,id,name from alen;



ORA_ARCHIVE_STATE ID NAME

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

0 1 Alen

0 2 Lucy

5データをアーカイブするための変更
ALEN@PROD2> update alen set ora_archive_state=2 where id=2;



1 row updated.



ALEN@PROD2> commit;



Commit complete.



ALEN@PROD2> select ora_archive_state,id,name from alen;



ORA_ARCHIVE_STATE ID NAME

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

0 1 Alen

非表示列を0以外の値に設定すると、行レコードは表示されません.
6パラメータROW ARCHIVAL VISIBILITY設定
セッション・レベルでこのパラメータを設定すると、アーカイブされたデータ行の可視性が得られます.このパラメータには、次の2つの値があります.
  • ACTIVE:デフォルト値で、このパラメータを設定した後、クエリーを実行するとデータベースはactiveデータ行を返します.
  • ALL:この値のパラメータの後で、クエリを実行する時、データベースはすべてのデータ行を返します;

  • 6.1パラメータ値をALLに設定
    ALEN@PROD2> select ora_archive_state,id,name from alen;
    
    
    
    ORA_ARCHIVE_STATE ID NAME
    
    -------------------- ---------- --------------------
    
    0 1 Alen
    
    2 2 Lucy

    6.2設定パラメータ値がACTIVE
    ALEN@PROD2> insert into alen(ora_archive_state,id,name) values(1,3,'Tom');
    
    
    
    1 row created.
    
    
    
    ALEN@PROD2> commit;
    
    
    
    Commit complete.
    
    
    
    ALEN@PROD2> alter session set row archival visibility=active;
    
    
    
    Session altered.
    
    
    
    ALEN@PROD2> select ora_archive_state,id,name from alen;
    
    
    
    ORA_ARCHIVE_STATE ID NAME
    
    -------------------- ---------- --------------------
    
    0 1 Alen

    7行アーカイブの無効化
    ALEN@PROD2> alter table alen no row archival;
    
    
    
    Table altered.
    
    
    
    ALEN@PROD2> select * from alen;
    
    
    
    ID NAME
    
    ---------- --------------------
    
    1 Alen
    
    2 Lucy
    
    3 Tom

    以上、Oracle 12 cの新しいプロパティ行アーカイブの使用について説明します.このプロパティの非表示列ora_archive_stateは、データの削除またはアーカイブを実現します.