<< 返回文章列表

分区表可以使用不同BLOCK_SIZE的表空间吗?

2017年12月19日
杨廷琨
1724

编辑手记:Oracle数据库中有两种类型的块,标准块和非标准块。非标准块的引入给数据库的管理带来了方便,但在使用的时候也有一些限制。本文将会详细解读块大小对于分区表的影响。

看文档的时候提到了多个BLOCKSIZE对分区的影响,觉得比较有意思,于是测试了一下。


结论一:Oracle是不允许一个表的多个分区所在的表空间所处的表空间的BLOCKSIZE不同:

image.png

image.png

image.png

结论二:允许索引和表的BLOCKSIZE不一致:


image.png


索引的各个分区所在表空间要求BLOCKSIZE一致,但是不要求和表的分区BLOCKSIZE一致。表的不同索引可以存储在不同BLOCKSIZE的表空间上。


除了索引之外,表的LOB字段可以和表存放在不同的BLOCKSIZE的表空间中,同样的,分区表的LOB分区所在表空间的BLOCKSIZE可以和表分区所在表空间的BLOCKSIZE不同:


image.png


当然,分区的表的LOB的各个分区必须存在在相同的BLOCKSIZE的表空间上,否则会报错:


image.png


同样的限制条件也适用于索引组织表的OVERFLOW段:


image.png


同样,不同的OVERFLOW分区所在表空间的BLOCKSIZE必须相同:



基本上来说:



OVERFLOW段和LOB段允许和表或表分区的BLOCKSIZE不一致,而各个分区,无论是表分区、索引分区、OVERFLOW分区还是LOB分区都必须保持分区级的一致。


杨老师,LOB和OVER段与表的BLOCKSIZE是不是必须一致呢?


允许LOB和OVER段与表的BLOCKSIZE不一致是有一定意义的,比如在一个BLOCKSIZE为2K的数据库中,如果LOB段的大小也是2K,对于LOB的存储容量和效率都会产生不利的影响。

那不同分区的BLOCKSIZE呢?


其实也是有一定意义的,这样有利于不同数据库之间进行表空间迁移和EXCHANGE PARTITION操作,不过现在Oracle还不允许这种情况出现。