Oracle 11g复合分区 - 范围|哈希

时间:2013-06-18 06:50:33

标签: sql oracle partitioning

我正在尝试创建一个表并按范围对其进行分区,然后按哈希进行子分区。但是我收到了一个错误。我怀疑剧本中有什么问题。当我们进行范围分区时,我们可以为哈希指定不同数量的子分区,如下例所示(分区OTHER_1有三个子分区,而所有其他分区有两个)。

CREATE TABLE ACCOUNTHOLDER_P (id INT, purchased DATE, OBJECT_TYPE VARCHAR2(50), PHONE_NUMBER VARCHAR2(50))

PARTITION BY RANGE (OBJECT_TYPE)
SUBPARTITION BY HASH(PHONE_NUMBER) (

PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||')  TABLESPACE USERS (     
  SUBPARTITION sp1 TABLESPACE ABC,
  SUBPARTITION sp2 TABLESPACE ABC
  ),

PARTITION CONSUMER_1 VALUES LESS THAN ('||''''||'User%'||''''||')   TABLESPACE USERS ( 
  SUBPARTITION sp3 TABLESPACE XYZ,
  SUBPARTITION sp4 TABLESPACE XYZ
  ),

PARTITION OTHER_1 VALUES LESS THAN (MAXVALUE)   TABLESPACE USERS (
  SUBPARTITION sp5 TABLESPACE KLM,
  SUBPARTITION sp6 TABLESPACE KLM,
  SUBPARTITION sp7 TABLESPACE KLM
  ));

PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||') TABLESPACE USERS ( SUBPARTITION sp1 TABLESPACE ABC, SUBPARTITION sp2 TABLESPACE ABC ), PARTITION CONSUMER_1 VALUES LESS THAN ('||''''||'User%'||''''||') TABLESPACE USERS ( SUBPARTITION sp3 TABLESPACE XYZ, SUBPARTITION sp4 TABLESPACE XYZ ), PARTITION OTHER_1 VALUES LESS THAN (MAXVALUE) TABLESPACE USERS ( SUBPARTITION sp5 TABLESPACE KLM, SUBPARTITION sp6 TABLESPACE KLM, SUBPARTITION sp7 TABLESPACE KLM ));

错误:

感谢

此致

时代

2 个答案:

答案 0 :(得分:3)

...琐碎

KLM,
   ^ that's the problem

评论后更新:

检查那些单引号。不清楚您是否希望它们属于您的分区值,也是百分号。也许不是

PARTITION PARTNER_1 VALUES LESS THAN ('||''''||'Partner%'||''''||')

这将完全符合您的要求:

PARTITION PARTNER_1 VALUES LESS THAN ('Partner')

第二次评论后更新:

我只能猜测你可能正在寻找类似的东西:

select '||'''||'User%'||'''||' from dual;

||'User%'||

但是,将其用作分区值是没有意义的。请解释一下你想要完成的任务。

答案 1 :(得分:3)

散列分区和子分区应始终具有2 - 2,4,8,16,32等的幂 - 或者最终它们之间的行分布不均匀。

除此之外,文档中有一个示例说明如何指定哈希子分区的数量 - http://docs.oracle.com/cd/E18283_01/server.112/e16541/part_admin001.htm#i1006565

但是,我无法想象你为什么要这样做。散列分区对于提高大型等值连接的性能很有用,但是当连接表具有相同数量的散列分区/子分区时,这是最有效的。