现有客户相关的表,cus_acc(cusId--客户ID,acno--客户卡号,product--购买产品,stat_date--统计日期,...)
因每天都有大量的客户购买大量的产品,所以cus_acc表的数据量很大,而且表中只保留了40天的数据,
每天晚上自动调用存储过程将当天的交易数据导入cus_acc表,并将40天以前的数据删除,现想将cus_acc表改成分区表,
如每10天一分区,该怎样分啊,因cus_acc表中的stat_date每天都在变化,不知道怎样取日期分区?谢谢

解决方案 »

  1.   

    使用范围分区,使用ORACLE联机表重组的办法,将数据交换进各分区。
      

  2.   

    示例:
    create table cus_acc(...)
    partition by range(stat_date)
    (
       partition P_10_01_1 values less than date '2010-01-11' ,
       partition P_10_01_2 values less than date '2010-01-21' ,
       partition P_10_01_3 values less than date '2010-02-01' ,
       partition P_10_02_1 values less than date '2010-02-11' ,
       partition P_10_02_2 values less than date '2010-02-21' ,
       partition P_10_02_3 values less than date '2010-03-01' ,
    ................
    )
      

  3.   

    这里因为每天晚上都会将stat_date为当天纪录加进来,并且删除stat_date为40天以前的数据,这样分区时将时间写固定的话那分区数目都不能确定了,所以不知道分区的条件有没有什么其它的写法?
      

  4.   

    SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE); 表已创建。 SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS; 已创建29733行。 SQL> COMMIT; 提交完成。 CREATE TABLE T_NEW (ID, TIME) PARTITION BY RANGE (TIME) 
        (PARTITION P1 VALUES LESS THAN (TO_DATE('2005-1-1', 'YYYY-MM-DD')), 
        PARTITION P2 VALUES LESS THAN (TO_DATE('2006-1-1', 'YYYY-MM-DD')), 
        PARTITION P3 VALUES LESS THAN (TO_DATE('2007-1-1', 'YYYY-MM-DD')), 
        PARTITION P4 VALUES LESS THAN (TO_DATE('2008-1-1', 'YYYY-MM-DD')), 
        PARTITION P5 VALUES LESS THAN (MAXVALUE)) 
        AS SELECT ID, TIME FROM T; 表已创建 SQL> RENAME T TO T_OLD; 
    表已重命名。 SQL> RENAME T_NEW TO T; 
    表已重命名。 
      

  5.   

    那就得每一天一分区了,然后把40天前的分区drop掉