Oracle 分区表中存在range-list表分区时遇到问题及解决办法
我们遇到的通常是list分区这种居多,我就不介绍了。
以下解决的是 复合分区情况
表已存在,需要在范围分区中增加一个分区 我们常说的表分区为range这种
下面是已有两个分区 T_QC, T_SC ,现在要增加一个T_RC
partition T_QC values less than ('SC')
tablespace
CUX_****
pctfree
10
initrans
1
maxtrans
255
(
subpartition
T_QC_1 values (1) tablespace CUX_****,
subpartition
T_QC_DEFAULT values (DEFAULT) tablespace CUX_****
),
partition T_SC values less than ('SD')
tablespace
CUX_****
pctfree
10
initrans
1
maxtrans
255
(
subpartition
T_SC_1 values (1) tablespace CUX_****,
subpartition
T_SC_DEFAULT values (DEFAULT) tablespace CUX_****
),
a.将T_QC 进行拆分,拆分成
T_QC,T_RC
ALTER TABLE
CUX_LINES_XX
SPLIT PARTITION T_QC AT ('T_RC') INTO
(PARTITION T_QC tablespace CUX_****,
PARTITION T_RC tablespace CUX_****);
b.新生成T_RC中,会有T_QC一样的子分区,这些分区先删除,再增加新的子分区
注意:删除顺序是 先删除默认子分区,再删除其他子分区
ALTER TABLE CUX_LINES_XX
DROP SUBPARTITION T_RC_DEFAULT;
ALTER TABLE
CUX_LINES_XX
DROP SUBPARTITION T_RC_1
;
c.增加新的T_RC的子分区,顺序是先增加其他子分区,再增加默认子分区
ALTER
TABLE CUX_LINES_XX MODIFY PARTITION T_RC
ADD SUBPARTITION T_RC_11 VALUES (11) tablespace
CUX_****; ALTER TABLE CUX_LINES_XX MODIFY PARTITION
T_RC
ADD
SUBPARTITION T_RC_12 VALUES (12) tablespace
CUX_****; ALTER TABLE CUX_LINES_XX MODIFY PARTITION
T_RC
ADD SUBPARTITION T_RC_DEFAULT VALUES (DEFAULT) tablespace
CUX_****;
ORA-14621: cannot add subpartition when DEFAULT subpartition
exists
Cause: An ADD SUBPARTITION operation cannot be executed when a
subpartition with DEFAULT values exists
Action: Issue a SPLIT of the DEFAULT subpartition instead
以上问题 出现在新增子分区时:
分区表中有子分区,而且存在默认子分区时,需要先删除默认子分区,再增加新的子分区,最后再把增加默认子分区。
ORA-14629:cannot drop the only subpartition of a partition
以上问题出现在删除子分区时:
删除子分区时 如果有默认子分区(Deafult)时,先删除DEFAULT;
再删除其他子分区
经实验得出结论:
删除子分区顺序是 先删除默认子分区,再删除其他子分区
增加子分区顺序是 先增加其他子分区,再增加默认子分区
--刘轶鹤