LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-08-30

内容

行の表示・非表示を制御できる機能。
"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": 無効な識別子です。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0