数据文件、表空间管理

ORACLE存储结构层次
    块(block)   

    区(extent)

    段(segments)

    表空间(tablespace)

    块是最小的读写单位,区是最小的空间分配单位,区的大小由oracle自动管理,一般情况下
    前16个extent,每个extent 64K,  
    17-79 每个extent 1M
    80-199 每个extent 8M
    200开始每个 64M
    
    段是我们的数据库对象了,如表,索引
    表空间是最大的逻辑存储结构了,包含了 段、区、块,物理上它由一个或多个数据文件组成

表空间的管理方式
    字典管理
        所有的空间分配都记录在数据字典中 fet$   uet$ ,在并发量较大时,数据字典就成为瓶
        劲了

    本地管理
        在每个数据文件的文件头选6个块,在其中存放bitmap 来记录空间的分配信息


表空间类型
    永久表空间
        存放永久性数据,如表、索引等

    临时表空间
        存放一些临时性数,如:排序的中间结果、临进表
   
    UNDO表空间
        存放的是数据修改前的镜象

永久表空间管理
    创建:
    CREATE TABLESPACE 表空间名
    DATAFILE ......
    BLOCKSIZE ......

    例:
    SQL> create tablespace tt
      2  datafile '/u01/app/oracle/oradata/tt01.dbf' size 50m;


    例:创建非标准块的表空间
    SQL> alter system set db_32k_cache_size=10m;

     SQL> create tablespace tt2
      2  datafile '/u02/tt201.dbf' size 50m blocksize 32k;


默认表空间
    默认表空间分两个层次:数据库级、用户级

    查看数据库级的默认表空间
    SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties;

    修改数据库级的默认表空间:
    SQL> alter database default tablespace tt;

    查看用级默认表空间
    SQL> select USERNAME,DEFAULT_TABLESPACE from dba_users;

    修改用户级默认表空间
    SQL> alter user SCOTT default tablespace tt;

       
查看表空间的剩余空间:
    SQL> select TABLESPACE_NAME,sum(BYTES)/1024/1024 from dba_free_space
      2  group by TABLESPACE_NAME;
   
查看表空间总空间:
    SQL> select TABLESPACE_NAME,sum(BYTES)/1024/1024 from dba_data_files
      2  group by TABLESPACE_NAME;
       

表空间扩容
    1)增加数据文件
    SQL> alter tablespace users add datafile
        '/u01/app/oracle/oradata/orcl/users02.dbf'  size 50m;

    2)重置数据文件大小(使数据文件变得更大)
    SQL> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 from dba_data_files;

    SQL> alter database datafile '/u01/app/oracle/oradata/orcl/example01.dbf'
         resize 200m;

   
    3)设置数据文件自动增长
    SQL> select TABLESPACE_NAME,FILE_NAME,AUTOEXTENSIBLE from dba_data_files;

    SQL> alter database datafile '/u01/app/oracle/oradata/tt01.dbf' autoextend on
      2  next 10m maxsize 100m;


为用户限额:
    1、取消用户无限制使用表空间的权限
    SQL> revoke unlimited tablespace from scott;

    2、设置限额
    SQL> alter user scott quota 5m on users;

查看限额信息:
    SQL> select TABLESPACE_NAME,USERNAME,MAX_BYTES/1024/1024
        from dba_ts_quotas order by username;   

表空间状态修改:
    表空间状态有:online、offline、read only、read write

    修改: ALTER TABLESPACE tablespace_name online|offline|read only|read write


    表空间只读后,其中的数据不能被修改,但对象可被删除
    如果处在归档模式,数据文件也能offline


表空间改名:
    SQL> alter tablespace tt2 rename to mm;

数据文件移动:
    1、查看数据文件在哪个表空间,放在哪
    SQL> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 from dba_data_files;

    2、把数据文件所在的表空间离线,再把相应的数据文件移走
    SQL> alter tablespace tt offline;
    SQL> select TABLESPACE_NAME,CONTENTS,STATUS from dba_tablespaces;

    SQL> host mv /u01/app/oracle/oradata/tt01.dbf  /u02/tt01.dbf

    3、修改控制文件记录,使表空间的文件指向到新的位置
    SQL> alter database rename file '/u01/app/oracle/oradata/tt01.dbf'
      2  to '/u02/tt01.dbf';

    4、表空间 online

大文件表空间
    ORACLE中分为大文件表空间和小文件表空间
    大文件表空间:
        一个表空间只能有一个文件,文件最大可以达到  2的32次方(4G)个块
        8-128T
 
    小文件表空间:
        原则上数据文件的数量无限制,文件最大可以达到 2的22次方(4M)个块
        8G-128G

创建方法:
    SQL> create bigfile tablespace bf_t1
      2  datafile '/u02/bf_t101.dbf' size 50m;
   

创建后,怎么看是大文件表空间还是小文件表空间
    SQL> select TABLESPACE_NAME,BLOCK_SIZE,CONTENTS,BIGFILE from dba_tablespaces;


设置默认表空间类型
    千万不要以为默认创建的是小文件表空间,究间是大文件表空间还是小文件表空间,取决于oracle的设置
   
    ALTER DATABASE SET DEFAULT smallfile|bigfile TABLESPACE

OMF管理的表空间
    使用OMF管理表空间,需要设置
    db_create_file_dest

    SQL> alter system set db_create_file_dest='/u02/';

   
    使用omf
    SQL> create tablespace omf1;


    使用omf后,文件名,文件大小可以不管了,由oracle自己定,删除表空间,
    操作系统上的文件,oracle会自动帮你删除

    OMF创建文件时的默认大小是100M,如果想改大小,加datafile size ...

删除表空间
    DROP TABLESPACE ...... [ INCLUDING CONTENTS ]

永久表空间使用上的一些建议:
    1、分隔参与资源争用的数据
    如表和索引,经常同时访问,最好把他们分别放到不同的表空间上

    2、分隔具有不同存储要求的对象
    如将较小的表和较大表放到不同的表空间上

    3、对分区表,将不同的分区放到不同的表空间上


临进表空间
    临进表空间存放一些临时性数据,如排序的中间结果、临时表之类的

    创建:
    CREATE TEMPORARY TABLESPACE tablespace_name
    TEMPFILE ......


    SQL> CREATE TEMPORARY TABLESPACE temp2
      2  TEMPFILE '/u02/temp201.dbf' size 100m;


    扩容:
   
    1)增加临时文件
    SQL> alter tablespace temp2 add tempfile
      2  '/u02/temp202.dbf' size 50m;


    2)重置数据文件大小(使数据文件变得更大)
    SQL> select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 from dba_data_files;

    SQL> alter database tempfile '/u02/temp201.dbf' resize 100m;


   
    3)设置数据文件自动增长
    SQL> select TABLESPACE_NAME,FILE_NAME,AUTOEXTENSIBLE from dba_data_files;

    SQL> alter database tempfile '/u02/temp201.dbf' autoextend on
      2  next 10m maxsize 200m;


临时表空间使用不同于永久表空间
    临时表空间,系统或用户只能用一个临地表空间(默认的那一个)

查看默认临进表空间
    SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties;
   
    SQL> select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users;

修改系统临时表空间
    SQL> alter database default temporary tablespace temp2;

修改用户临时表空间
    SQL> alter user scott temporary tablespace temp2;


临时表空间组
    临进表空间组是一个逻辑的概念,它不需要显示的去创建,也不需要显示的去删除
    在创建临地表空间时,可以指定一个表空间组,也可以在创建后加入到一个组
    临时表空间组中的成员全部移走后,组就自动删除



    SQL> create temporary tablespace temp3 tempfile '/u03/temp301.dbf' size 50m
      2  tablespace group temp_grp;

    SQL> alter tablespace temp2 tablespace group temp_grp;


    将表空间从组中移除
    SQL> alter tablespace temp3 tablespace group '';


UNDO表空间
    保存数据修改前的镜象

    创建:
    CREATE UNDO TABLESPACE tablespace_name
    DATAFILE ...

    SQL> CREATE UNDO TABLESPACE undo2
      2  DATAFILE '/u02/undo201.dbf' size 100m;


    其它的一些维护操作与永久表空间一样

    UNDO表空间管理参数设定
    undo_tablespace         使用哪个UNDO表空间
    undo_retention        数据在UNDO表空间保留时长(目标时长,是不能保证的,
                                如果一定保留这么久,也有办法)



    SQL> alter tablespace undo2 retention GUARANTEE;
       
与表空间相关的数据字典:
    dba_tablespaces
    dba_data_files
    dba_temp_files
    v$datafile
    v$tempfile   
    DBA_FREE_SPACE
    DBA_TS_QUOTAS  
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21175589/viewspace-755711/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21175589/viewspace-755711/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值