由于业务量的增加,公司已有的数据库中的消费明细表,将被改为分区表,但是表已建完就不能改成分区表了,为了不影响到现有的运营,请各位数据库高手提供一个可行的解决方案。100分奉送!

解决方案 »

  1.   

    建立分区表A,insert into A select from old_table就可以了.
    记得好象exchange partion with 也可以,具体语法记不清了.
      

  2.   

    建立分区表A,insert /*+append*/ into A select from old_table 然后  drop table old_table;然后 alter table a rename to old_table;最后重新编译存储过程、触发器、视图,重建索引
      

  3.   

    把表内数据导成insert语句脚本,drop原表,建分区表,执行脚本导入数据
      

  4.   

    exchange partition提供了快速转换普通成分区表的方法,它通过更新数据字典来实现分区与普通表的置换,所以速度相当快.
    create table t1 as select sysdate dt, all_objects.* from all_objects;
    create table t3 as select add_months(sysdate,-24) dt, all_objects.* from all_objects;create table t( dt, OWNER, OBJECT_NAME, SUBOBJECT_NAME,
    OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE, CREATED,
    LAST_DDL_TIME, TIMESTAMP, STATUS, TEMPORARY,
    GENERATED, SECONDARY )
    partition by range(dt) (
    partition part2003 values less than ( to_date( '01-jan-2004',
    'dd-mon-yyyy') ),
    partition part2004 values less than ( to_date( '01-jan-2005',
    'dd-mon-yyyy') ),
    partition part2005 values less than ( to_date( '01-jan-2006',
    'dd-mon-yyyy') )
    )
    as
    select sysdate dt, all_objects.* from all_objects where 1=0;
    /
     
    SQL 10G>set timing on
    SQL 10G>alter table t
      2  exchange partition part2003
      3  with table t3
      4  /
    Table altered.
    Elapsed: 00:00:00.07
     SQL 10G>alter table t
      2  exchange partition part2005
      3  with table t1
      4  /
    Table altered.
    Elapsed: 00:00:00.07
      

  5.   

    它是更新数据字典而不是重新copy data block.这也是我知道的最快捷的办法了.