【问题标题】:How to modify a partition to add more than one sub Partition to this existing partition?如何修改一个分区以将多个子分区添加到这个现有分区?
【发布时间】:2017-08-07 04:15:49
【问题描述】:

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

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 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)         
                      )**

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

【问题讨论】:

  • 请提供您的 CREATE TABLE 语句。
  • CREATE TABLE HTL_ALLOTMENT_TRACE ( allotmentTraceID NUMBER(19) NOT NULL, organizationID NUMBER(19) NOT NULL, locationID NUMBER(10) NOT NULL, traceBusinessDate DATE NOT NULL ) 按列表分区 (organizationID) 按范围分区(traceBusinessDate) (PARTITION HALMTTRC_1 VALUES (1))
  • 请编辑您的问题而不是发表评论 - 这很难阅读。
  • 我已经编辑了这个问题。请立即检查。

标签: oracle partitioning partition


【解决方案1】:

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 个子分区 - 尽管您的表只有两个分区。

【讨论】:

  • 这个问题我只在修改分区时遇到。如果我用 5 年的子分区创建一个新分区,那么它工作正常。不知道问题出在哪里。
猜你喜欢
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多