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

  • 相关阅读:
    wget(转)
    852. Peak Index in a Mountain Array
    617. Merge Two Binary Trees
    814. Binary Tree Pruning
    657. Judge Route Circle
    861. Score After Flipping Matrix
    832. Flipping an Image
    461. Hamming Distance
    654. Maximum Binary Tree
    804. Unique Morse Code Words
  • 原文地址:https://www.cnblogs.com/tianlesoftware/p/3609158.html
Copyright © 2011-2022 走看看