Dの小部屋

忘れやすい私のメモ帳

【Oracle 12Cのお勉強】データベース内アーカイブ

内容

行の表示・非表示を制御できる機能。 "CREATE TABLE"時に"ROW ARCHIVAL"句をつけることで、ORA_ARCHIVE_STATE列が追加され、表示・非表示を制御できるようになる。

検証

▼表の作成

SQL> create table ttt (
  2    n number(10),
  3    v varchar2(10)
  4  ) row archival;

表が作成されました。

▼テストデータの挿入

SQL> insert into ttt values (1,'abc');

1行が作成されました。

SQL> insert into ttt values (2,'def');

1行が作成されました。

SQL> insert into ttt values (3,'ghi');

1行が作成されました。

SQL> commit;

コミットが完了しました。

▼ORA_ARCHIVE_STATE列は通常見えない。

SQL> desc ttt
 名前         NULL?    型
 ----------- -------- ----------------------------
 N                    NUMBER(10)
 V                    VARCHAR2(10)

SQL> select * from ttt;
 N V
-- ---
 1 abc
 2 def
 3 ghi

▼以下のSQLで確認することができる。

SQL> select ttt.*, ora_archive_state from ttt;

N V   ORA_ARCHIVE_STATE
-- --- -----------------
 1 abc 0
 2 def 0
 3 ghi 0

▼ORA_ARCHICE_STATEの型を確認する。

SQL> select column_name,data_type,data_length 
  2  from user_tab_cols where column_name='ORA_ARCHIVE_STATE';
 
COLUMN_NAME       DATA_TYPE  DATA_LENGTH
----------------- --------- ------------
ORA_ARCHIVE_STATE VARCHAR2          4000

▼ORA_ARCHIVE_STATE列が0の場合は表示、それ以外の値が格納されている場合は非表示になる。

SQL> update ttt set ora_archive_state=1 where n=2;

1行が更新されました。

SQL> commit;

コミットが完了しました。

SQL> select * from ttt;
 N V
-- ---
 1 abc
 3 ghi

▼セッションパラメータを変更することにより、非表示列を表示させることができる。

SQL> ALTER SESSION SET ROW ARCHIVAL VISIBILITY=ALL;

セッションが変更されました。

SQL> select * from ttt;

 N V
-- ---
 1 abc
 2 def
 3 ghi

SQL> ALTER SESSION SET ROW ARCHIVAL VISIBILITY=ACTIVE;

セッションが変更されました。

SQL> select * from ttt;

 N V
-- ---
 1 abc
 3 ghi

▼ORA_ARCHIVE_STATE列には、文字も格納することが可能。(非表示になる)

SQL> update ttt set ora_archive_state=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') where n=3;

1行が更新されました。

SQL> commit;

コミットが完了しました。

SQL> select * from ttt;

 N V
-- ---
 1 abc

▼ORA_ARCHIVE_STATE列の内容を確認

SQL> alter session set row archival visibility=all;

セッションが変更されました。

SQL> select ttt.*,ora_archive_state from ttt;

 N V   ORA_ARCHIVE_STATE
-- --- -------------------
 1 abc 0
 2 def 1
 3 ghi 2016-08-29 23:42:59

▼ROW ARCHIVALを無効にする。

SQL> alter table ttt no row archival;

表が変更されました。

SQL> select * from ttt;

 N V
-- ---
 1 abc
 2 def
 3 ghi

SQL> select ttt.*,ora_archive_state from ttt;
select ttt.*,ora_archive_state from ttt
             *
行1でエラーが発生しました。:
ORA-00904: "ORA_ARCHIVE_STATE": 無効な識別子です。