Oracle 11g新特性之只读表

php中文网
发布: 2016-06-07 15:21:31
原创
1403人浏览过

在Oracle 11g之前的版本中,若想对表设置只读,可以通过赋予SELECT对象权限给指定用户,但是表的拥有者仍然拥有读写权限。而Orac

在oracle 11g之前的版本中,若想对表设置只读,可以通过赋予select对象权限给指定用户,但是表的拥有者仍然拥有读写权限。而oracle 11g 允许通过alter  table 命令将表标记为只读(read-only)。只读表跟普通的表没有区别,只是不允许任何事务对其执行任何 dml(insert, update, delete) 操作。

测试环境
    我们在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>

 

创建测试表
    我们创建一个测试表,命名为linuxidc;然后,插入两条测试数据。

SQL>

SQL> create table linuxidc(id number,name varchar2(20));

Table created.

SQL> insert into linuxidc values(1,'linuxidc');

1 row created.

SQL> insert into linuxidc values(10,'linuxidc');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from linuxidc;

        ID NAME

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

        1 linuxidc

        10 linuxidc

SQL>

SQL>
 

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

SQL>

SQL> alter table linuxidc read only;

Table altered.

SQL>

SQL> select table_name ,read_only from user_tables;

TABLE_NAME REA

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

linuxidc YES

SQL>
 

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

SQL>

SQL> insert into linuxidc values(100,'linuxidc');

insert into linuxidc values(100,'linuxidc')

            *

ERROR at line 1:

ORA-12081: update operation not allowed on table "linuxidc"."linuxidc"

SQL>

SQL> update linuxidc set id=100 where id=10;

update linuxidc set id=100 where id=10

Text-To-Pokemon口袋妖怪
Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪 1494
查看详情 Text-To-Pokemon口袋妖怪

      *

ERROR at line 1:

ORA-12081: update operation not allowed on table "linuxidc"."linuxidc"

SQL>

SQL> delete from linuxidc where id=10;

delete from linuxidc where id=10

            *

ERROR at line 1:

ORA-12081: update operation not allowed on table "linuxidc"."linuxidc"

SQL>
 

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

SQL>

SQL> truncate table linuxidc;

truncate table linuxidc

              *

ERROR at line 1:

ORA-12081: update operation not allowed on table "linuxidc"."linuxidc"

SQL>
 

执行DROP语句成功
 

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

SQL> drop table linuxidc;

Table dropped.

SQL>
 

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

SQL>

SQL> alter table linuxidc read write;

Table altered.

SQL> select table_name ,read_only from user_tables;

TABLE_NAME REA

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

linuxidc NO

SQL>

SQL> insert into linuxidc values(100,'linuxidc');

1 row created.

SQL> commit;

Commit complete.

SQL> update linuxidc set id=11 where id=10;

1 row updated.

SQL> commit;

Commit complete.

SQL> select * from linuxidc;

        ID NAME

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

        1 linuxidc

        11 linuxidc

      100 linuxidc

SQL>

本文永久更新链接地址

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号