テーブルを read only に変更できる
Oracle11g より、テーブルレベルで読み取り専用モードの設定が可能となった。
まず事前状態を確認するためには、dba_tables テーブルを参照すればよい。
例として、TEST スキーマの HOGE テーブルを変更する手順を紹介する。
事前確認
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 (書き込みモード) となっている。
読み取り専用へ変更
SQL> alter table HOGE read only; 表が変更されました。
モード変更確認
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 (読み取りモード) に変更された。
意図的にエラー(ORA-12081)を発生させてみる
SQL> insert into HOGE values('33333','33333'); * 行1でエラーが発生しました。: ORA-12081: 表"TEST"."HOGE"で更新操作は許可されません。
SQL> truncate table HOGE; * 行1でエラーが発生しました。: ORA-12081: 表"TEST"."HOGE"で更新操作は許可されません。
→ READ_ONLY の機能が有効になっていることを確認。
SQL> select * from HOGE; COL1 COL2 ----------- ----------- 11111 11111 22222 22222
→ 当然、READ_ONLY でも参照は可能。
書き込みモードへ戻す
SQL> alter table HOGE read write; 表が変更されました。
戻し確認
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 (読み書きモード) に変更された。
試行
SQL> insert into HOGE values('33333','33333'); 1行が作成されました。
SQL> truncate table HOGE; 表が切り捨てられました。