【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データベースのバージョン
2行アーカイブの有効化
ロー・アーカイブを有効にすると、テーブルに非表示のカラムORA_が追加されます.ARCHIVE_STATEは、この値が0と1、0はデータがactive、1はデータがinactiveであることを示し、データを挿入する際にその列の値を指定しなければデフォルトでは0となる.
3テーブル構造の表示
4テストデータの作成と表示
5データをアーカイブするための変更
非表示列を0以外の値に設定すると、行レコードは表示されません.
6パラメータROW ARCHIVAL VISIBILITY設定
セッション・レベルでこのパラメータを設定すると、アーカイブされたデータ行の可視性が得られます.このパラメータには、次の2つの値があります. ACTIVE:デフォルト値で、このパラメータを設定した後、クエリーを実行するとデータベースはactiveデータ行を返します. ALL:この値のパラメータの後で、クエリを実行する時、データベースはすべてのデータ行を返します;
6.1パラメータ値をALLに設定
6.2設定パラメータ値がACTIVE
7行アーカイブの無効化
以上、Oracle 12 cの新しいプロパティ行アーカイブの使用について説明します.このプロパティの非表示列ora_archive_stateは、データの削除またはアーカイブを実現します.
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つの値があります.
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は、データの削除またはアーカイブを実現します.