管理表空间的几个基本准则
- 使用多个表空间
使用多个表空间是有好处的,
从硬件上说:我们可以将不同应用的数据存放在不同的表空间内,并且放在不同的分区上,这样可以防止多个应用抢占磁盘的I/O资源,另外当磁盘有损坏时不会同时影响到多个应用。
从数据库上说:使用多个表空间可以将不同的用户数据从数据字典中分离,以减少一个数据文件的数据字典对象和模式对象之间的竞争。
同样的临时表空间也是需要创建多个,用来匹配表空间,保证在执行操作过程中,得到更优化的响应。 - 指定表空间的存储参数
这个主要是针对不同的特殊应用来做(比如只做查询的表空间),暂时没研究。一般的应用就让oracle自己管理吧。 - 为表空间指定限额
合理的限额对表空间的利用率是有很大帮助的,如果一个只会用到20M的空间,而你却给它分配几百M,是不是就成为一个很严重的资源浪费。
另外要提的是当表空间不够用的时候,需要做的是增加表空间所在文件的数据文件的大小,或者新建几个比较大的数据文件,而不是创建很多个比较小的数据文件,这么做理由应该是很好理解的。
值得注意的表空间存储参数:
MINIMUM:CREATE TABLESPACE的一个参数,它能影响表空间段的分配,换句话说是能影响到表空间中空闲空间碎片的一个参数,当为它指定大小后,它能确保所有空闲的或者已分配的盘区的大小一定是它的倍数,以K或者M计算,系统的默认值似乎是64K。
ALTER TABLESPACE语句的限制:ALTER TABLESPACE语句可以用来修改一个表空间的存储参数,但是它不能用来修改INITIAL和MINEXTENTS,一个表空间的默认参数的新值只能影响到将来该表空间为段分配的盘区,而已有分配的还是照创建时的设定值。因此一旦设定了默认参数,最好不要随意修改。
合并表空间中的空闲空间:
先来看看空闲空间是如何存储的:一个表空间的空闲空间是一些相邻的空闲块构成的,这些空闲块的大小不用说当然是由MINIMUM设定的,当需要创建一个新的表空间存储段的时候,系统会在这些连续的空闲块中寻找大小大于新存储段大小的区间进行创建,而当一个表空间存储段被取消时它的空间将直接被标记成空闲块,这样就会造成表空间中,连续的空闲块大小越来越小,越来越不连续,那么在之后需要创建新的表空间段时,就无法保证新的表空间段的空间是连续的块,当然oracle会自动去做合并这个事,那我们可以通过管理来减轻系统的负担。
手动合并空闲的空间:ALTER TABLESPACE ... COALESCE 这个语句用来合所有的空闲空间,起到的作用类似于WINDOWS的磁盘整理,对操作者的权限要求是有 ALTER TABLESPACE 权限(似乎是句废话,但是如果发现无法执行的时候,不妨GRANT ... ALTER TABLESPACE),不过这条语句不能用来合并一个表空间中不同盘区的所有空闲空间,如果要做到所有盘区的空闲空间的整理,除非导出空间数据再重新创建表空间再导入数据,而且最好只有一个盘区。
那么如何才能了解表空间中空闲空间的分布呢(就是如何监控空闲空间)?有几个视图帮我们记录了这些数据:DBA_FREE_SPACE 、 DBA_FREE_SPACE_COALESCE。我们要做的就是在上面做查询,得到某个表空间中空闲空间的分布:SELECT BLOCK_ID, BYTES, BLOCKS, FROM DBA_FREE_SPACE WHERE TABLESPACE_NAME = '**' ORDER BY BLOCK_ID; 结果显而易见。
另外表空间的管理还有 设置表空间是否联机。表空间可以有两种状态:脱机和联机,什么意思?脱机就是证明这表空间虽然存在但是它不能被使用,联机则相反。修改语句就是 : ALTER TABLESPACE ……[ONLINE/OFFLINE]。
今天到此。明天继续表空间。。。。内容真不少。。