先前未考虑数据量问题,在建立表的时候没有给表建立分区,现在数据量剧增,需要给表加分区,如何做??原先表A  有个字段名为 Status, int型,现在需要根据Status分区,如何做???
看介绍都是在创建表的时候在结束语句加partition by range(Status) 来创建,但是我开始建表的时候没有,该怎么办呀??
高手help、、、多谢

解决方案 »

  1.   

    备份数据,重新建表。例子
    create table TB_NAME
    (
      ID    NUMBER,
      JE    NUMBER(10,2),
      IDATE DATE
    )
    partition by range (IDATE)
    (
      partition PART_01 values less than (TO_DATE(' 2007-01-01', 'SYYYY-MM-DD')),
      partition PART_02 values less than (TO_DATE(' 2008-01-01', 'SYYYY-MM-DD')),
      partition PART_03 values less than (TO_DATE(' 2009-01-01', 'SYYYY-MM-DD')),
      partition PART_04 values less than (MAXVALUE)
    );
      

  2.   

    用1楼的方法,先建一个表然后用insert into t2 select * from t1;的方式把数据做到新表里去。
      

  3.   

    方法当然是有的但是我没在生产上试过http://www.oracle-base.com/articles/misc/PartitioningAnExistingTableUsingExchangePartition.php
      

  4.   

    楼主看下下面的,希望对你有用:
    Oracle9i以上版本,利用在线重定义功能对已有表进行分区
    Drop table t;
    CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE); 
    INSERT INTO T
    SELECT ROWNUM, SYSDATE - ROWNUM FROM DBA_OBJECTS WHERE ROWNUM <= 5000;
    COMMIT;
    EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T'); 
    PL/SQL 过程已成功完成。 
    CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME) 
    (PARTITION P1 VALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')), 
    PARTITION P2 VALUES LESS THAN (TO_DATE('2005-1-1', 'YYYY-MM-DD')), 
    PARTITION P3 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')), 
    PARTITION P4 VALUES LESS THAN (MAXVALUE)); 
    表已创建。 
    EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_NEW'); 
    PL/SQL 过程已成功完成。 
    EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'T', 'T_NEW'); 
    PL/SQL 过程已成功完成。 
    SELECT COUNT(*) FROM T; 
    COUNT(*)
    ----------
    5000 
    SELECT COUNT(*) FROM T PARTITION (P3); 
    COUNT(*)
    ----------
    1096 
    优点:保证数据的一致性,在大部分时间内,表T都可以正常进行DML操作。只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理操作。