Таблицы только для чтения в Oracle 11g Release 1
ALTER TABLE table_name READ ONLY;
ALTER TABLE table_name READ WRITE;
Следующий скрипт создает таблицу, добавляет в нее несколько строк, затем устанавиливает таблицу в режим "только для чтения".
CREATE TABLE ro_tab (
id NUMBER
);
INSERT INTO ro_tab VALUES (1);
INSERT INTO ro_tab VALUES (2);
INSERT INTO ro_tab VALUES (3);
INSERT INTO ro_tab VALUES (4);
ALTER TABLE ro_tab READ ONLY;
Любое предложение DML которое будет применятся к данным таблицы и запросы SELECT ... FOR UPDATE будут возвращать ошибку ORA-12081.
SQL> INSERT INTO ro_tab VALUES (5);
INSERT INTO ro_tab VALUES (5)
*
ERROR at line 1:
ORA-12081: update operation not allowed on TABLE "TEST"."RO_TAB"
SQL> UPDATE ro_tab SET id = 2;
UPDATE ro_tab SET id = 2
*
ERROR at line 1:
ORA-12081: update operation not allowed on TABLE "TEST"."RO_TAB"
SQL> DELETE FROM ro_tab;
DELETE FROM ro_tab
*
ERROR at line 1:
ORA-12081: update operation not allowed on TABLE "TEST"."RO_TAB"
Предложения DDL так же будут ограничены.
SQL> TRUNCATE TABLE ro_tab;
TRUNCATE TABLE ro_tab
*
ERROR at line 1:
ORA-12081: update operation not allowed on TABLE "TEST"."RO_TAB"
SQL> ALTER TABLE ro_tab ADD (description VARCHAR2(50));
ALTER TABLE ro_tab ADD (description VARCHAR2(50))
*
ERROR at line 1:
ORA-12081: update operation not allowed on TABLE "TEST"."RO_TAB"
Операции над индексами связанными с этой таблицей не будут применятся, если таблица в режиме только для чтения. DML и DDL операции пройдут нормально, как только таблица будет переключена в режим записи.
SQL> ALTER TABLE ro_tab READ WRITE;
TABLE altered.
SQL> DELETE FROM ro_tab;
1 row deleted.
Статус таблицы можно узнать из столбца READ_ONLY представлений DBA_TABLES, ALL_TABLES, USER_TABLES.