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

Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行DML操作和某些DDL操作。在Oracle11g之前的版本,只能将整个tablespace或者database置于read only状态。对于table的控制则只能通过权限来设定。

CREATE TABLE products(prod_id varchar2(6) NOT null,quantity number,price number,expiry_date date);ALTER TABLE products READ only;
TRUNCATE TABLE products;
ALTER TABLE products SET unused(expiry_date);
ALTER TABLE products DROP  unused columns;
CREATE INDEX idxxx ON products(price);
ALTER TABLE products DROP COLUMN expiry_date;
DROP TABLE products;
HR@lhr121> CREATE TABLE products(prod_id varchar2(6) NOT null,quantity number,price number,expiry_date date);Table created.HR@lhr121> HR@lhr121> ALTER TABLE products READ only;Table altered.HR@lhr121> TRUNCATE TABLE products;
TRUNCATE TABLE products*
ERROR at line 1:
ORA-12081: update operation not allowed on table "HR"."PRODUCTS"HR@lhr121> ALTER TABLE products SET unused(expiry_date);
ALTER TABLE products SET unused(expiry_date)
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "HR"."PRODUCTS"HR@lhr121> ALTER TABLE products DROP  unused columns;Table altered.HR@lhr121> CREATE INDEX idxxx ON products(price);Index created.HR@lhr121> ALTER TABLE products DROP COLUMN expiry_date;
ALTER TABLE products DROP COLUMN expiry_date
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "HR"."PRODUCTS"HR@lhr121> DROP TABLE products;Table dropped.

案例分析:

11:44:46 SCOTT@ test1 >select * from tab;

TNAME                          TABTYPE  CLUSTERID

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

BONUS                          TABLE

CREDIT_CLUSTER                 CLUSTER

CREDIT_ORDERS                  TABLE            1

DEPT                           TABLE

EMP                            TABLE

EMP1                           TABLE

11:44:56 SCOTT@ test1 >select count(*) from emp1;

COUNT(*)

----------

18

Elapsed: 00:00:00.04

11:45:12 SCOTT@ test1 >alter table emp1 read only;

Table altered.

11:51:46 SCOTT@ test1 >select read_only from user_tables where table_name='EMP1';

REA

---

YES

对只读表做DML:

11:45:20 SCOTT@ test1 >insert into emp1 select * from emp where rownum=1;

insert into emp1 select * from emp where rownum=1

*

ERROR at line 1:

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

Elapsed: 00:00:00.04

11:45:38 SCOTT@ test1 >delete from emp1;

delete from emp1

*

ERROR at line 1:

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

Elapsed: 00:00:00.00

11:45:47 SCOTT@ test1 >update emp1 set sal=6000 where empno=7788;

update emp1 set sal=6000 where empno=7788

*

ERROR at line 1:

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

TRUNCATE TABLE:

11:46:03 SCOTT@ test1 >truncate table emp1;

truncate table emp1

*

ERROR at line 1:

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

Elapsed: 00:00:00.09

DROP TABLE:

11:46:45 SCOTT@ test1 >drop table emp1;

Table dropped.

Elapsed: 00:00:00.70

11:47:05 SCOTT@ test1 >show recycle;

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

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

EMP1             BIN$ComP5WftmQ7gUKjA+QgIyQ==$0 TABLE        2014-12-19:11:47:04

11:47:52 SCOTT@ test1 >flashback table emp1 to before drop;

Flashback complete.

11:49:56 SCOTT@ test1 >select count(*) from emp1;

COUNT(*)

----------

18

MOVE TABLE:

11:50:06 SCOTT@ test1 >alter table emp1 move;

Table altered.

Elapsed: 00:00:00.54

压缩表:

11:51:27 SCOTT@ test1 >alter table emp1 compress;

Table altered.

Elapsed: 00:00:00.09

11:51:39 SCOTT@ test1 >alter table emp1 nocompress;

Table altered.

Elapsed: 00:00:00.16

约束管理:

11:52:53 SCOTT@ test1 >alter table emp1 add constraint fk_emp1 foreign key(deptno) references dept(deptno);

Table altered.

11:54:29 SCOTT@ test1 >alter table emp1 drop constraint fk_emp1;

Table altered.

11:54:47 SCOTT@ test1 >create index emp1_empno_ind on emp1(empno) tablespace indx;

Index created.

索引管理:

11:55:17 SCOTT@ test1 >drop index emp1_empno_ind;

Index dropped.

配置read write:

11:55:27 SCOTT@ test1 >alter table emp1 read write;

Table altered.

11:55:37 SCOTT@ test1 >select read_only from user_tables where table_name='EMP1';

REA

---

NO

在11g前的版本中,若想对表设置为只读,可以通过赋予SELECT对象权限给这些用户,但表的拥有者还是读写的。而Oracle 11g 允许表标记为只读(read-only)通过ALTER  TABLE 命令。

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

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>

更多详细请查阅官方文档:

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_3001.htm

http://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_2105.htm



About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ),注明添加缘由

● 于 2019-09-01 06:00 ~ 2019-09-31 24:00 在西安完成

● 最新修改时间:2019-09-01 06:00 ~ 2019-09-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班: http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页: https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

   

Oracle 11g 新特性:只读表(Read-only)相关推荐

  1. Oracle 11g 新特性 -- 只读表(read-only table)说明

    一.Read only table说明 在Oracle 11g之前,如果我们想要对一个表设置为只读的,可以通过授予某些用户select 权限. 但是对于表的所有者来说,还是读写的. 在Oracle 1 ...

  2. Oracle 11g新特性之--只读表(read only table)

    Oracle 11g新特性之--只读表(read only table)       Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行 ...

  3. ORACLE 11g新特性中文版

    Oracle 11g 新特性 摘自ITPUB的love_zz的帖子 http://www.itpub.net/712880.html Oracle 11g 现在已经开始进行beta测试,预计在2007 ...

  4. 11g awr oracle 系列_Oracle 11g AWR 系列七:Active Sessi...-Oracle 11G新特性(共36个)-父子节点问题_169IT.COM...

    Oracle 11G新特性(共36个) 一.数据库管理部分 ·      1. 数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据 ...

  5. Oracle 11g 新特性 -- Transparent Data Encryption (透明数据加密TDE) 增强 说明

    一.TransparentData Encryption (TDE:透明数据加密) 说明 Orace TDE 是Orcle 10R2中的一个新特性,其可以用来加密数据文件里的数据,保护从操作系统层面上 ...

  6. Oracle 11g新特性之--虚拟列(Virtual Column)

    Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时, ...

  7. oracle+字段+virtual,Oracle 11g新特性之--虚拟列(Virtual Column)

    Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时, ...

  8. Oracle 11g新特性之缓存与连接池

    Oracle 11g新特性之缓存与连接池 上一篇 /下一篇  2008-03-26 16:03:19 / 个人分类:Oracle 数据库 11g面向 DBA 和开发人员的重要新特性 查看( 414 ) ...

  9. Oracle 11g新特性direct path read引发的系统停运故障诊断处理

    Oracle 11g新特性direct path read引发的系统停运故障诊断处理 黎俊杰 | 2016-07-28 14:37 声明:部分表名为了脱敏而用XX代替 1.故障现象 (1)一个业务系统 ...

最新文章

  1. 2019RPA财务行业峰会:财务数字化转型
  2. 006-spring cache-缓存实现-01-原生实现
  3. 可视化Spring开发插件 Spring IDE
  4. Kubernetes — PV、PVC
  5. 从微信AI首席顾问到金融文档智能
  6. 图像白化MATLAB代码实现
  7. r语言将百分数化为小数_「淮南师出」教师资格/招聘小学数学:《百分数与小数的互化》...
  8. DDD(领域驱动设计)系列之二-应用架构
  9. Real Application Testing Database Replay、SPA的价格和介绍
  10. 【渝粤教育】电大中专电子商务网站建设与维护_1作业 题库
  11. wx2540h配置教程_H3CEWP-WX2540H多业务无线控制器
  12. Kafka 常用命令
  13. 基于python爬虫数据分析论文_基于Python的招聘网站信息爬取与数据分析
  14. 【计算机视觉】图像拼接技术
  15. c++求三个数中的最大值和最小值
  16. excel单元格内的数值向上、向下取整
  17. [Linux] 解决 CentOS 重启电脑后 ibus 拼音输入法无效的问题
  18. R语言 - 逻辑回归
  19. 2018年最新PHP面试题
  20. c语言编程计算π的值

热门文章

  1. win10下使用JMeter5进行压力测试
  2. ES索引的生命周期管理
  3. 【C++】【学习笔记】【递归与回溯问题详解与例题】排列问题;组合问题;二维平面回溯;flood fill问题;搜索问题(八皇后);
  4. 最全面的SpringMVC教程(四)——Controller 与 RestFul
  5. 【沃顿商学院学习笔记】管理学——01 Introduction to Corruption
  6. Windows基础安全设置
  7. 某企业生产工厂【防窜货】程序实现过程
  8. 分治法与蛮力法求最近点对问题(分治法时间复杂度O(nlogn))
  9. KUKA 以太网安装包
  10. 视频教程-Python入门精讲视频,从入门到精通-Python