Oracle 11g新特性之只读表

测试环境
    我们在Oracle11g(11.2.0.3)进行测试。

SQL>

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

SQL>

SQL>

Table created.

1 row created.

1 row created.

SQL> commit;

Commit complete.

        ID NAME

---------- --------------------

SQL>

SQL>
 

将普通表设为只读表
    我们通过alter table ... read only;语句来实现只读表;而且,我们可以通过数据字典视图 (ALL_TABLES,DBA_TABLES,USER_TABLES,TABS)中的 READ_ONLY 列查询表的只读属性,如下所示:

SQL>

Table altered.

SQL>

SQL> select table_name ,read_only from user_tables;

TABLE_NAME REA

------------------------------ ---

SQL>
 

执行DML语句报错
 
    只读表不允许任何事务对其执行任何 DML(Insert, Update, Delete) 操作,否则系统会报ORA-12081错误,提示操作不被允许。

SQL>

            *

ERROR at line 1:

SQL>

      *

ERROR at line 1:

SQL>

            *

ERROR at line 1:

SQL>
 

执行TRUNCATE语句报错
    只读表除了不能执行所有DML语句操作外,部分DDL语句也不能执行,比如TRUNCATE,否则系统同样会报ORA-12081错误,提示操作不被允许。

SQL>

              *

ERROR at line 1:

SQL>
 

执行DROP语句成功
 

    针对只读表的DROP操作,是被允许的。

Table dropped.

SQL>
 

将只读表设为普通表
    我们通过alter table ... read write;语句来实现将只读表设为普通读写表。参看下面SQL语句:

SQL>

Table altered.

SQL> select table_name ,read_only from user_tables;

TABLE_NAME REA

------------------------------ ---

SQL>

1 row created.

SQL> commit;

Commit complete.

1 row updated.

SQL> commit;

Commit complete.

        ID NAME

---------- --------------------

SQL>

猜你喜欢

转载自www.linuxidc.com/Linux/2015-08/121125.htm