11g新機能 テーブル読み取りモードの変更

Oracle11g より、テーブルレベルで読み取り専用モードの設定が可能となった。
まず事前状態を確認するためには、dba_tables テーブルを参照すればよい。


例として、TEST スキーマの HOGE テーブルを変更する手順を紹介する。

1. 事前確認

SQL> select table_name, status, read_only from dba_tables where table_name = 'HOGE';

TABLE_NAME   STATUS   READ_ONLY
------------ -------- ---------
HOGE         VALID    NO

READ_ONLY が NO (書き込みモード) となっている。

2. 読み取り専用へ変更

SQL> alter table HOGE read only;

表が変更されました。

(1) 変更確認

SQL> select table_name, status, read_only from dba_tables where table_name = 'HOGE';

TABLE_NAME   STATUS   READ_ONLY
------------ -------- ---------
HOGE         VALID    YES

READ_ONLY が YES (読み取りモード) に変更された。

(2) お試し

・insert を実行

SQL> insert into HOGE values('33333','33333');
            *
行1でエラーが発生しました。:
ORA-12081: 表"TEST"."HOGE"で更新操作は許可されません。

・truncate table を実行

SQL> truncate table HOGE;
               *
行1でエラーが発生しました。:
ORA-12081: 表"TEST"."HOGE"で更新操作は許可されません。

→ READ_ONLY の機能が有効になっていることを確認。

・select を実行

SQL> select * from HOGE;

COL1        COL2
----------- -----------
11111       11111
22222       22222

→ 当然、READ_ONLY でも参照は可能。

3. 書き込みモードへ戻す

SQL> alter table HOGE read write;

表が変更されました。

(1) 戻し確認

SQL> select table_name, status, read_only from dba_tables where table_name = 'HOGE';

TABLE_NAME   STATUS   READ_ONLY
------------ -------- ---------
HOGE         VALID    NO

→ READ_ONLY が NO (読み書きモード) に変更された。

(2) 試行

・insert を実行

SQL> insert into HOGE values('33333','33333');

1行が作成されました。

・truncate table を実行

SQL> truncate table HOGE;

表が切り捨てられました。


関連記事

人気ブログランキングへ

このページの先頭へ