zoukankan      html  css  js  c++  java
  • Oracle 只读表空间 说明


    一.之前Blog的说明

    之前的Blog里对Oracle 的只读表空间做了一些说明,链接如下:

    Oracle 表空间创建参数 说明

    http://blog.csdn.net/tianlesoftware/article/details/6166928

    Oracle 表空间基本操作

    http://blog.csdn.net/tianlesoftware/article/details/4681973

    Oracle 重建控制文件 对 只读表空间 和 临时表空间 影响 测试

    http://blog.csdn.net/tianlesoftware/article/details/7231680

           假如存在一个只读的表空间,那么在重建控制文件之后,read-only的数据文件会重命名为MISSING00005的格式,最后是5位数字,这个数据根据file_id 对应。并且datafile 也会变成offline。

           所以在重建控制文件之后,我们需要对只读文件的datafile 进行rename 操作,还原成原来的名称,并且修改其状态为online。具体操作示例有说明。

           在重建控制文件之前需要留意datafile 的文件名称,如果有多个datafile,那么就需要注意其顺序。这个需要注意一下。

    二.只读表空间

        只读表空间可以用来处理过期化的数据,当然也可以使用之前提到的压缩或者进行转历史。

    Oracle数据压缩(Compression) 技术 说明

    http://blog.csdn.net/tianlesoftware/article/details/8170488

    将表空间设为只读,可以带来如下好处:

    2.1 减少数据库备份和恢复时间

        对于只读表空间,只需要在第一备份时进行备份,在以后的备份中不需要在对备份过的只读表空间进行备份。

    相关内容参考:

    RMAN 系列(四) ---- RMAN 备份

    http://blog.csdn.net/tianlesoftware/article/details/5687938

    Oracle 块修改跟踪 (Block Change Tracking) 说明

    http://blog.csdn.net/tianlesoftware/article/details/6997647

    2.2 减少数据库启动和关闭的时间

        在shutdown immediate 关闭数据库时,会将dirty data同步到磁盘上,即写入datafile。 因此这个操作可能会占用较多的时间。 同样在启动时也会有同步datafile的操作。

        当表空间设置为只读后,在启动和关闭时就不会对只读表空间对应的数据文件进行处理。从而减少了数据库启动和关闭的时间。

    2.3 防止对数据的误操作

        只读表空间可以限制如下的操作:

    Insert

    Update

    Delete

    Truncate

    Create

    因为这些操作需要修改数据文件的block,而对于只读表空间上的表字段的修改,或者删除表和索引,都是不受限制,因为这些操作都是直接修改数据字典。

    2.4 分区表的数据过期化处理

        前提是的分区表的每个分区都在单独的表空间上,当对应分区过期后,可以直接将该分区对应的表空间设置为只读,那么对应分区的数据也就不能被修改,注意:这里仅仅是争对修改,我们还是可以进行DDL操作的。

    三.只读表空间数据修改测试

    --创建表空间dave

    SQL> select file_name fromdba_data_files;

    FILE_NAME

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

    /u01/app/oracle/oradata/anqing/users01.dbf

    /u01/app/oracle/oradata/anqing/undotbs01.dbf

    /u01/app/oracle/oradata/anqing/sysaux01.dbf

    /u01/app/oracle/oradata/anqing/system01.dbf

    /u01/app/oracle/oradata/anqing/example01.dbf

    SQL> create tablespace dave file'/u01/app/oracle/oradata/anqing/dave01.dbf' size 100M autuextend off;

    create tablespace dave file'/u01/app/oracle/oradata/anqing/dave01.dbf' size 100M autuextend off

                           *

    ERROR at line 1:

    ORA-02180: invalid option for CREATETABLESPACE

    SQL> c/file/datafile/

      1*create tablespace dave datafile '/u01/app/oracle/oradata/anqing/dave01.dbf'size 100M autuextend off

    SQL> c/autuextend/autoextend/

      1*create tablespace dave datafile '/u01/app/oracle/oradata/anqing/dave01.dbf'size 100M autoextend off

    SQL> /

    Tablespace created.

    SQL> set lin 160

    SQL> col tablespace_name for a15

    SQL> col file_name for a50

    SQL> select tablespace_name,file_namefrom dba_data_files;

    TABLESPACE_NAME FILE_NAME

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

    DAVE           /u01/app/oracle/oradata/anqing/dave01.dbf

    USERS          /u01/app/oracle/oradata/anqing/users01.dbf

    UNDOTBS1       /u01/app/oracle/oradata/anqing/undotbs01.dbf

    SYSAUX         /u01/app/oracle/oradata/anqing/sysaux01.dbf

    SYSTEM         /u01/app/oracle/oradata/anqing/system01.dbf

    EXAMPLE        /u01/app/oracle/oradata/anqing/example01.dbf

    6 rows selected.

    --创建表

    SQL> create table dave tablespace daveas select * from dba_objects;

    Table created.

    --创建索引:

    SQL> create index idx_dave_id ondave(object_id);

    Index created.

    --表空间dave 设置为只读:

    SQL> alter tablespace dave read only;

    Tablespace altered.

    --删除表dave上的数据:

    SQL> delete from dave;

    delete from dave

               *

    ERROR at line 1:

    ORA-00372: file 6 cannot be modified atthis time

    ORA-01110: data file 6:'/u01/app/oracle/oradata/anqing/dave01.dbf'

    --因为表空间是只读的,所以无法删除。

    --update 表dave

    SQL> update dave set object_id=1 whererownum=1;

    update dave set object_id=1 where rownum=1

          *

    ERROR at line 1:

    ORA-00372: file 6 cannot be modified atthis time

    ORA-01110: data file 6:'/u01/app/oracle/oradata/anqing/dave01.dbf'

    --无法update

    --insert 数据:

    SQL> insert into dave select * fromdba_objects;

    insert into dave select * from dba_objects

               *

    ERROR at line 1:

    ORA-00372: file 6 cannot be modified atthis time

    ORA-01110: data file 6:'/u01/app/oracle/oradata/anqing/dave01.dbf'

    --无法truncate

    SQL> truncate table dave;

    truncate table dave

                   *

    ERROR at line 1:

    ORA-00372: file 6 cannot be modified atthis time

    ORA-01110: data file 6:'/u01/app/oracle/oradata/anqing/dave01.dbf'

    --同样,在只读表空间也无法进行create table 操作,因为无法分配空间:

    SQL> create table dave2 tablespace daveas select * from dba_objects;

    create table dave2 tablespace dave asselect * from dba_objects

                                                       *

    ERROR at line 1:

    ORA-01647: tablespace 'DAVE' is read-only, cannotallocate space in it

    但是我们可以对只读表空间上的对象做一些不涉及表空间的操作,只修改数据字典的操作是可以进行的。

    --添加列:

    SQL> alter table dave add col1varchar2(20);

    Table altered.

    --修改列:

    SQL> alter table dave modify col1varchar2(200);

    Table altered.

    --删除列:

    SQL> alter table dave drop column col1;

    alter table dave drop column col1

    *

    ERROR at line 1:

    ORA-12988: cannot drop column from tableowned by SYS

    --注意这里的提示是不能删除SYS用户对象的列。 其实即使换成其他用户,也是不能删除。这里就不在测试了。

    --drop 索引和表:

    SQL> drop index idx_dave_id;

    Index dropped.

    SQL> drop table dave;

    Table dropped.

    由此,对于只读表空间上的对象,我们仅仅是不能进行修改,但是我们还是可以进行drop,添加修改列等操作。 因为这些操作不涉及表空间的操作,仅仅是对Oracle 数据字典的修改。

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

    Skype:    tianlesoftware

    QQ:       tianlesoftware@gmail.com

    Email:    tianlesoftware@gmail.com

    Blog:     http://blog.csdn.net/tianlesoftware

    Weibo:    http://weibo.com/tianlesoftware

    Twitter:  http://twitter.com/tianlesoftware

    Facebook: http://www.facebook.com/tianlesoftware

    Linkedin: http://cn.linkedin.com/in/tianlesoftware

  • 相关阅读:
    【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十六:VGA模块
    mini2440 u-boot下设置tftp
    mini2440 u-boot禁止蜂鸣器
    【转载】帧缓冲驱动程序分析及其在BSP上的添加
    debian7 amd64版本添加对x86包的支持
    debian7配置
    u盘安装debian 7(Wheezy) stabe
    【python练习题】实现字符串反转
    【python练习题】 删除列表中的重复元素(list的应用)
    【python练习题】冒泡排序 和插入排序 (list的应用)
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3609158.html
Copyright © 2011-2022 走看看