首页 / ORACLE / Oracle11g新特性之只读表
Oracle11g新特性之只读表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle11g新特性之只读表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3323字,纯文字阅读大概需要5分钟。
内容图文
在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
*
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>
本文永久更新链接地址:
内容总结
以上是互联网集市为您收集整理的Oracle11g新特性之只读表全部内容,希望文章能够帮你解决Oracle11g新特性之只读表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。