日期:2014-05-16  浏览次数:20418 次

oracle中多分区的迁移
这周很平静,没有客户的纷纷扰扰。

     前一阵子写了一些有关数据表的压缩的东西,我现在感觉把数据压缩了迁移走,或者直接迁移走也是一种不错的办法。

     现在有这样一张表:

CREATE TABLE TABLE_1

(

   MONTH_ID VARCHAR2(10),

   AREA_ID VARCHAR2(10),

   SERI NUMBER

)

PARTITION BY RANGE(MONTH_ID)

subpartition by list (AREA_ID)

  subpartition template(

      subpartition subpart_290 values ('290'),

      subpartition subpart_919 values ('919'),

      subpartition subpart_917 values ('917'),

      subpartition subpart_910 values ('910'),

      subpartition subpart_913 values ('913'),

      subpartition subpart_916 values ('916'),

      subpartition subpart_915 values ('915'),

      subpartition subpart_914 values ('914'),

      subpartition subpart_911 values ('911'),

      subpartition subpart_912 values ('912'),

      subpartition subpart_default values (default)

  )

(

   PARTITION PART_1 VALUES LESS THAN('201210'),

   PARTITION PART_2 VALUES LESS THAN('201211'),

   PARTITION PART_3 VALUES LESS THAN('201212')

)

       数据是这样的:

 

下载 (4.9 KB)

1 小时前
 

下载 (5.19 KB)

1 小时前
       现在可以将这个表的month_id为“201209”的数据迁移到users表空间去:

ALTER TABLE table_1 MOVE PARTITION part_1 TABLESPACE USERS;

 

下载 (16.37 KB)

1 小时前
      出错了,在网上查了一下应该要先把子分区移走。

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_290 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_910 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_911 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_912 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_913 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_914 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_915 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_916 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_917 TABLESPACE USERS;

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_919 TABLESPACE USERS;

     然后在执行下面的:

ALTER TABLE table_1 MODIFY DEFAULT ATTRIBUTES FOR PARTITION part_1

TABLESPACE USERS;

     这是结果:




 

下载 (3.81 KB)

1 小时前
      现在这个分区被转移到了users中。

      如果没有子分区会是什么样?重建这个表,这次不要子分区,只是按照month_id分区,然后执行转移语句:

ALTER TABLE table_1 MOVE PARTITION part_1 TABLESPACE USERS;

      直接成功。这就说明了转移带有子分区的分区表的时候,应该从最低级的子分区开始转移,然后转移上一级的分区。

      那么压缩呢,将上面这个表的part_1压缩,语句如下:

ALTER TABLE table_1 MOVE PARTITION part_1 COMPRESS;

      结果如下:




 

下载 (13.32 KB)

1 小时前
       建立有子分区的表,然后执行刚才的语句:

 

下载 (15.53 KB)

1 小时前
     &n