oracle 表空间管理

      ORACLE数据库对DATAFILE的管理是从逻辑上划分表空间,通过表空间来管理的。

      建立数据库的时必须建立SYSTEM表空间,SYSAUX表空间。

      SYSTEM表空间用来管理数据库的数据字典,SYSAUX表空间是SYSTEM的辅助表空间,它分担了SYSTEM表空间数据字典的一些信息,存放性能监控和调优的一些动态视图。还要建立用来回滚的UNDO表空间,还要建立临时表空间,建立完库以后还要给用户建立默认表空间。剩下的表空间就可以根据生产环境自己建立。
         一个表空间可能对应一个或多个数据文件。

         建立对象时给对象分配表空间,会建立一个段。ORACLE里最小的存储单位为块,但是给段分配空间时不是按块分的,块太小了,分配起来太繁琐,而是按区分的,区又是由块组成的。ORACLE的块又是由操作系统的块组成的。

     DATAFILE是由很多的数据块组成。
   当在表表空间上建立对象的时候,表空间首先要查找有哪些区没有使用,如果表空间上没有空闲的区则无法再创建对象
对表空间的空闲区的管理有两种方式:一种叫本地管理,一种叫数据字典管理。
    数据字典管理是兼容9I之前的数据库,它用两个数据字典 uet$ 和 fet $来存放表空间区的空闲信息,记录哪些区没有使用和已经使用。如果在一个比较繁忙的数据库里,大家都要访问数据字典,会导致数据库的性能受到严重影响。这种管理方式,每个表空间都不知道自己是否还有空间,还要去访问数据字典查看自己表空间的空闲信息。这种方式在9I以后就被淘汰了。
   本地管理会在表空间上建立位图,通过位图来管理表空间的空闲区,在位图里用0和1来表示区是否被占用。本地管理也就是自己的空间自己做主,不需要再去访问数据字典。
  先简单说一下,表空间的管理方式。后续会继续,举例说明各种表空间使用遇到的问题。
受限ROWID已经在8I时被拓展ROWID取代,取代的原因是使用这个ROWID导致整个数据库只能有1022个数据文件,拓展ROWID 又引入了对象号,受限ROWID中的文件号,也变成了相对文件号。
   添加的数据文件是有限制的, 11GR2版本默认是200个,这个通过参数db_files,maxdatafiles参数控制,而maxdatafiles是写在控制文件里的。
        有文档指出,db_files<maxdatafiles,如果db_files值已经等于maxdatafiles的值,要想增大db_files,必须增大maxdatafiles,并不是这样,实际上只有修改db_files值就可以。此参数是静态参数,修改必须重启数据库。
        后续我们将继续讨论表空间在使用是遇到的具体案例。

SELECT A.TABLESPACE_NAME,
       ROUND(A.MAX_SUM_SPACE, 2) "最大空间总和(M)",
       ROUND(A.ALLOCATED_SPACE, 2) "已分配总数(M)",
       ROUND(A.ALLOCATED_SPACE - B.ALLOCATED_FREE_SPACE, 2) "已使用总数(M)",
       ROUND(B.ALLOCATED_FREE_SPACE, 2) "已分配剩余总数(M)",
       ROUND(A.MAX_SUM_SPACE - A.ALLOCATED_SPACE + B.ALLOCATED_FREE_SPACE,
             2) "最大剩余表空间(M)",
       ROUND(A.MAX_SUM_SPACE - A.ALLOCATED_SPACE + B.ALLOCATED_FREE_SPACE,
             2) / ROUND(A.ALLOCATED_SPACE, 2) * 100 "asm full,最大剩余/已分配"
  FROM (SELECT B.TABLESPACE_NAME,
               SUM(DECODE(B.AUTOEXTENSIBLE, 'YES', B.MAXBYTES, B.BYTES) / 1024 / 1024) AS MAX_SUM_SPACE,
               SUM(A.BYTES) / 1024 / 1024 AS ALLOCATED_SPACE
          FROM V$DATAFILE A, DBA_DATA_FILES B
         WHERE A.FILE# = B.FILE_ID
         GROUP BY B.TABLESPACE_NAME) A,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / 1024 / 1024, 2) AS ALLOCATED_FREE_SPACE
          FROM SYS.DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) B
 WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
 ORDER BY 4 desc;
</maxdatafiles,如果db_files值已经等于maxdatafiles的值,要想增大db_files,必须增大maxdatafiles,并不是这样,实际上只有修改db_files值就可以。此参数是静态参数,修改必须重启数据库。

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

转载于:http://blog.itpub.net/31324783/viewspace-2132139/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值