Таблицы только для чтения в 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.