如何修改分区以向此现有分区添加多个子分区?

时间:2017-03-16 06:06:47

标签: oracle partitioning partition

我正在尝试将子分区添加到现有分区,但我收到此错误:

  

Oracle错误:ORA-14158

     

错误说明:子分区描述太多

     

错误原因:CREATE TABLE或CREATE INDEX包含太多子分区描述;最大子分区数为1048575。

     

操作:减少子分区数不超过1024K-1。

如果我尝试将一个子分区添加到现有分区,则可以使用此查询:

ALTER TABLE table_name MODIFY PARTITION partition_name ADD
SUBPARTITION subpartition_name VALUES  LESS THAN (TO_DATE('01-03-2018' , 'DD-MM-YYYY'));

但是,如果我尝试向这个现有分区添加多个子分区,则会出现上述错误:

以下是对它的查询:

ALTER TABLE table_name MODIFY PARTITION partition_name ADD
SUBPARTITION subpartition_name1 VALUES  LESS THAN (TO_DATE('01-03-2018' , 'DD-MM-YYYY')),
SUBPARTITION subpartition_name2 VALUES  LESS THAN (TO_DATE('01-04-2018' , 'DD-MM-YYYY'));

即使我没有创建超过1024K-1的子分区,我仍然会得到太多的子分区描述错误。

这是Create Table Statement:

                **CREATE TABLE HTL_ALLOTMENT_TRACE (   

                    allotmentTraceID      NUMBER(19)            NOT NULL, 

                    organizationID        NUMBER(19)            NOT NULL,

                    locationID            NUMBER(10)            NOT NULL, 

                    traceBusinessDate     DATE                  NOT NULL                        
                )

                    PARTITION BY LIST (organizationID)

                    SUBPARTITION BY RANGE (traceBusinessDate)

                      (
                        PARTITION HALMTTRC_1 VALUES  (1)         
                      )**

如果有人有任何建议,请告诉我。

1 个答案:

答案 0 :(得分:0)

1024K-1分区(或子分区)的限制不适用于表中的实际分区数。 Oracle会考虑所有可能的分区。

例如,如果您有这样的表

CREATE TABLE MY_TABLE
(
   END_TIME TIMESTAMP 
)
PARTITION BY RANGE (END_TIME)
INTERVAL (INTERVAL '1' DAY)
(
  PARTITION P_1 VALUES LESS THAN (TIMESTAMP '2017-03-01 00:00:00'),
  PARTITION P_2 VALUES LESS THAN (TIMESTAMP '2017-04-01 00:00:00')
);

然后,Oracle将考虑31个分区以限制1048575子分区 - 尽管您的表只有两个分区。