多BLOCKSIZE对分区表的影响

多BLOCKSIZE对分区表的影响

引自:http://space.itpub.net/4227/viewspace-628191


看文档的时候提到了多个BLOCKSIZE对分区的影响,觉得比较有意思,于是测试了一下。
 
 
显然Oracle是不允许一个表的多个分区所在的表空间所处的表空间的BLOCKSIZE不同:
SQL> SHOW PARAMETER BLOCK_SIZE

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     16384
SQL> SELECT NAME FROM V$DATAFILE;

NAME
--------------------------------------------------------------------
/data/oradata/test112/system01.dbf
/data/oradata/test112/sysaux01.dbf
/data/oradata/test112/undotbs01.dbf
/data/oradata/test112/users01.dbf
/data/oradata/test112/yangtk01.dbf
/data/oradata/test112/test01.dbf

已选择6行。

SQL> SHOW PARAMETER DB_8K

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_8k_cache_size                     big integer 0
SQL> ALTER SYSTEM SET DB_8K_CACHE_SIZE =64MSCOPE = MEMORY;

系统已更改。

SQL> CREATE TABLESPACE TBS_8K
  2  DATAFILE '/data/oradata/test112/tbs_8k01.dbf'
  3  SIZE512M
  4  BLOCKSIZE 8K;

表空间已创建。

SQL> SELECT TABLESPACE_NAME, BLOCK_SIZE  
  2  FROM DBA_TABLESPACES;

TABLESPACE_NAME                BLOCK_SIZE
------------------------------ ----------
SYSTEM                              16384
SYSAUX                              16384
UNDOTBS1                            16384
TEMP                                16384
USERS                               16384
YANGTK                              16384
TEST                                16384
TBS_8K                               8192

已选择8行。

SQL> CREATE TABLE T_PART
  2  (ID NUMBER,
  3  NAME VARCHAR2(30),
  4  CREATE_DATE DATE)
  5  PARTITION BY RANGE (ID)
  6  (PARTITION P1 VALUES LESS THAN (100),
  7  PARTITION P2 VALUES LESS THAN (200) TABLESPACE TBS_8K);
PARTITION P2 VALUES LESS THAN (200) TABLESPACE TBS_8K)
                                               *
第7行出现错误:
ORA-14519:与table 的表空间块大小存在冲突:表空间TBS_8K的块大小8192 [partition specification]
与以前指定/隐含的表空间YANGTK的块大小16384 [user default tablespace assigned to partition]发生冲突

但是允许索引和表的BLOCKSIZE不一致:
SQL> CREATE TABLE T_PART
  2  (ID NUMBER,
  3  NAME VARCHAR2(30),
  4  CREATE_DATE DATE)
  5  PARTITION BY RANGE (ID)
  6  (PARTITION P1 VALUES LESS THAN (100),
  7  PARTITION P2 VALUES LESS THAN (200));

表已创建。

SQL> CREATE INDEX IND_T_PART_NAME ON T_PART (NAME) LOCAL
  2  (PARTITION P1 TABLESPACE TBS_8K, PARTITION P2 TABLESPACE TBS_8K);

索引已创建。

SQL> CREATE INDEX IND_T_PART_CDATE ON T_PART(CREATE_DATE) TABLESPACE TBS_8K;

索引已创建。

SQL> CREATE INDEX IND_T_PART_ID ON T_PART(ID) LOCAL;

索引已创建。

SQL> SELECT INDEX_NAME, PARTITION_NAME, TABLESPACE_NAME
  2  FROM USER_IND_PARTITIONS
  3  WHERE INDEX_NAME LIKE 'IND_T_PART%';

INDEX_NAME                     PARTITION_NAME                 TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
IND_T_PART_ID                  P1                             YANGTK
IND_T_PART_ID                  P2                             YANGTK
IND_T_PART_NAME                P1                             TBS_8K
IND_T_PART_NAME                P2                             TBS_8K

索引的各个分区所在表空间要求BLOCKSIZE一致,但是不要求和表的分区BLOCKSIZE一致。表的不同索引可以存储在不同BLOCKSIZE的表空间上。
除了索引之外,表的LOB字段可以和表存放在不同的BLOCKSIZE的表空间中,同样的,分区表的LOB分区所在表空间的BLOCKSIZE可以和表分区所在表空间的BLOCKSIZE不同:
SQL> CREATE TABLE T_PART_LOB
  2  (ID NUMBER,
  3  NAME VARCHAR2(30),
  4  CREATE_DATE DATE,
  5  CONTENTS CLOB)
  6  LOB (CONTENTS) STORE AS CONTENTS_LOB
  7  PARTITION BY RANGE (ID)
  8  (PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST
  9  LOB (CONTENTS) STORE AS P1 (TABLESPACE TBS_8K),
 10  PARTITION P2 VALUES LESS THAN (200)
 11  LOB (CONTENTS) STORE AS P2 (TABLESPACE TBS_8K));

表已创建。

当然,分区的表的LOB的各个分区必须存在在相同的BLOCKSIZE的表空间上,否则会报错:
SQL> CREATE TABLE T_PART_LOB_ERR
  2  (ID NUMBER,
  3  NAME VARCHAR2(30),
  4  CREATE_DATE DATE,
  5  CONTENTS CLOB)
  6  LOB (CONTENTS) STORE AS CONTENTS_LOB_ERR
  7  PARTITION BY RANGE (ID)
  8  (PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST
  9  LOB (CONTENTS) STORE AS P1 (TABLESPACE TBS_8K),
 10  PARTITION P2 VALUES LESS THAN (200)
 11  LOB (CONTENTS) STORE AS P2 (TABLESPACE YANGTK));
LOB (CONTENTS) STORE AS P2 (TABLESPACE YANGTK))
                                       *
第11行出现错误:
ORA-14519:与LOB column CONTENTS的表空间块大小存在冲突:表空间YANGTK的块大小16384 [partition specification]
与以前指定/隐含的表空间TBS_8K的块大小8192 [partition specification]发生冲突

同样的限制条件也适用于索引组织表的OVERFLOW段:
SQL> CREATE TABLE T_IND_PART
  2  (ID NUMBER PRIMARY KEY,
  3  NAME VARCHAR2(30),
  4  CREATE_DATE DATE)
  5  ORGANIZATION INDEX
  6  INCLUDING NAME
  7  OVERFLOW
  8  PARTITION BY RANGE (ID)
  9  (PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST
 10  OVERFLOW TABLESPACE TBS_8K,
 11  PARTITION P2 VALUES LESS THAN (200)
 12  OVERFLOW TABLESPACE TBS_8K);

表已创建。

同样,不同的OVERFLOW分区所在表空间的BLOCKSIZE必须相同:
 SQL> CREATE TABLE T_IND_PART_ERR
  2  (ID NUMBER PRIMARY KEY,
  3  NAME VARCHAR2(30),
  4  CREATE_DATE DATE)
  5  ORGANIZATION INDEX
  6  INCLUDING NAME
  7  OVERFLOW
  8  PARTITION BY RANGE (ID)
  9  (PARTITION P1 VALUES LESS THAN (100) TABLESPACE TEST
 10  OVERFLOW TABLESPACE TBS_8K,
 11  PARTITION P2 VALUES LESS THAN (200)
 12  OVERFLOW TABLESPACE YANGTK);
OVERFLOW TABLESPACE YANGTK)
                    *
第12行出现错误:
ORA-14519:与IOT overflow 的表空间块大小存在冲突:表空间YANGTK的块大小16384 [partition specification]
与以前指定/隐含的表空间TBS_8K的块大小8192 [partition specification]发生冲突

基本上来说,OVERFLOW段和LOB段允许和表或表分区的BLOCKSIZE不一致,而各个分区,无论是表分区、索引分区、OVERFLOW分区还是LOB分区都必须保持分区级的一致。
允许LOB和OVER段与表的BLOCKSIZE不一致是有一定意义的,比如在一个BLOCKSIZE为2K的数据库中,如果LOB段的大小也是2K,对于LOB的存储容量和效率都会产生不利的影响。
而允许不同分区的BLOCKSIZE不一致其实也是有一定意义的,这样有利于不同数据库之间进行表空间迁移和EXCHANGE PARTITION操作,不过现在Oracle还不允许这种情况出现。

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

转载于:http://blog.itpub.net/276487/viewspace-628582/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值