创建list-range的分区表的代码如下:
create table uu
       (USER_ID NUMBER(10), TXN_DATE DATE) TABLESPACE FLOW
       PARTITION BY LIST(USER_ID) 
       SUBPARTITION BY RANGE(TXN_DATE) 
       (
         PARTITION UUP0 VALUES (0)
         (  
           SUBPARTITION UUPOS20000101 VALUES LESS THAN (TO_DATE('2000-01-01','yyyy-mm-dd'))
         )
       );
我用代码 ALTER TABLE uu MODIFY PARTITION UUP0 ADD SUBPARTITION UUP0S201091 VALUES LESS THAN (TO_DATE('2010-9-1', 'yyyy-mm-dd')) TABLESPACE flow 可以成功的在分区UUP0下添加子分区。我用代码ALTER TABLE uu ADD PARTITION UUP6 VALUES (6) TABLESPACE flow能够成功的添加分区UUP6,但用代码ALTER TABLE uu MODIFY PARTITION UUP6 ADD SUBPARTITION UUP6S201091 VALUES LESS THAN (TO_DATE('2010-9-1', 'yyyy-mm-dd')) TABLESPACE flow在分区UUP6下添加子分区时出现奇怪的现象:(1) 有出错提示,在pl/sql下的错误提示是ORA-14049: 无效的 ALTER TABLE MODIFY PARTITION 选项,在sql*plus下的错误提示是ORA-14211: 子分区界限必须调整为高于最后一个子分区界限。(2) 虽然有错误提示,但在分区UUP6下已经添加了一个分区,但其分区名并不是我指定的子分区名字。继续用代码ALTER TABLE uu MODIFY PARTITION UUP6 ADD SUBPARTITION UUP6S201098 VALUES LESS THAN (TO_DATE('2010-9-8', 'yyyy-mm-dd')) TABLESPACE flow在分区UUP6添加子分区,错误提示是ORA-14211: 子分区界限必须调整为高于最后一个子分区界限,而且在分区UUP6下也没有添加子分区。
 
有哪位大哥能够帮我解决一下,非常感谢

解决方案 »

  1.   

    原因在于你建UU06分区的时候有问题 按照你的需求应该是这样建:
    alter table uu add partition uup6 values(6) (subpartition UUP6S201091 values less than (TO_DATE('2010-9-1', 'yyyy-mm-dd')));
    为什么你先建list分区再建range子分区会报错呢?原因在于当你执行ALTER TABLE uu ADD PARTITION UUP6 VALUES (6) TABLESPACE flow这个语句后 由于你没有指定具体的子分区,oracle就自动帮你建了,而且分区范围应该是oracle能接受的最高上限(我个人理解),所以你执行建range子分区ALTER TABLE uu MODIFY PARTITION UUP6 ADD SUBPARTITION UUP6S201091 VALUES LESS THAN (TO_DATE('2010-9-1', 'yyyy-mm-dd')) TABLESPACE flow时报ORA-14211错.
      

  2.   

    如果有有maxvalue的分区的话,也没有办法了。
      

  3.   


    可以通过查看all_tab_subpartition这个视图 找到系统自建的子分区,再通过命令drop掉就可以了啊