oracle

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

More than 1 year has passed since last update.

内容

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

検証

▼テスト用の表を作成 (row archivalを指定)

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でORA_ARCHIVE_STATE列が表示されることを確認

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": 無効な識別子です。