创建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.   


    SELECT dbms_metadata.get_ddl('TABLE','UU') FROM dual;
    --------------------------------------------------------------------------------
    CREATE TABLE "CTOS"."UU" 
       ( "USER_ID" NUMBER(10,0), 
    "TXN_DATE" DATE
       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
      STORAGE(
      BUFFER_POOL DEFAULT)
      TABLESPACE "DBODATA" 
      PARTITION BY LIST ("USER_ID") 
      SUBPARTITION BY RANGE ("TXN_DATE") 
     (PARTITION "UUP0"  VALUES (0) 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
      STORAGE(
      BUFFER_POOL DEFAULT)
      TABLESPACE "DBODATA" 
     ( SUBPARTITION "UUPOS20000101"  VALUES LESS THAN (TO_DATE(' 2000-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
       TABLESPACE "DBODATA" NOCOMPRESS , 
      SUBPARTITION "UUP0S201091"  VALUES LESS THAN (TO_DATE(' 2010-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
       TABLESPACE "DBODATA" NOCOMPRESS ) , 
     PARTITION "UUP6"  VALUES (6) 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
      STORAGE(
      BUFFER_POOL DEFAULT)
      TABLESPACE "DBODATA" 
     ( SUBPARTITION "SYS_SUBP81"  VALUES LESS THAN (MAXVALUE) 
       TABLESPACE "DBODATA" NOCOMPRESS ) ) 你创建UUP6分区的时候,没有明确定义子分区,所以Oracle默认创建一个MAXVALUE子分区,这种子分区结构不能增加,只能分割