Oracle 11g 新特性:只读表(Read-only)

2014-11-24 18:22:21 · 作者: · 浏览: 0

可以通过下面命令对表读写权限进行设置:


ALTER TABLE table_name READ ONLY;


ALTER TABLE table_name READ WRITE;


简单示例如下:


CREATE TABLE ro_test (


id number


);


INSERT INTO ro_test VALUES (1);


ALTER TABLE ro_test READ ONLY;



任何影响表数据的DML语句和SELECT...FOR UPDATE查询语句都返回ORA-12081错误信息


SQL> INSERT INTO ro_test VALUES (2);
INSERT INTO ro_test VALUES (2)
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."RO_TEST"



SQL> UPDATE ro_test SET id = 2;
UPDATE ro_test SET id = 2
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."RO_TEST"



SQL> DELETE FROM ro_test;
DELETE FROM ro_test
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."RO_TEST"


影响表数据的DDL语句也受限制


SQL> TRUNCATE TABLE ro_test;
TRUNCATE TABLE ro_test
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."RO_TEST"



SQL> ALTER TABLE ro_test ADD (description VARCHAR2(50));
ALTER TABLE ro_test ADD (description VARCHAR2(50))
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "TEST"."RO_TEST"


表是只读表但在与之相关的索引上操作不受影响。当表切换回读写模式时DML和DDL操作恢复正常。


SQL> ALTER TABLE ro_test READ WRITE;


Table altered.


SQL> DELETE FROM ro_test;


1 row deleted.


SQL>