您的位置:首页 > 数据库 > Oracle

一周以来的工作总结--oracle分区的迁移

2012-10-17 21:53 423 查看
这周很平静,没有客户的纷纷扰扰。

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

现在有这样一张表:

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_1 values ('1'),
subpartition subpart_2 values ('2'),
subpartition subpart_3 values ('3'),
subpartition subpart_4 values ('4'),
subpartition subpart_5 values ('5'),
subpartition subpart_6 values ('6'),
subpartition subpart_7 values ('7'),
subpartition subpart_8 values ('8'),
subpartition subpart_9values ('9'),
subpartition subpart_10 values ('10'),
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')
)


分区的存储是这样的:



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

ALTER TABLE table_1 MOVE PARTITION part_1 TABLESPACE USERS;




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

ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_1 TABLESPACE USERS;
ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_2 TABLESPACE USERS;
ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_3 TABLESPACE USERS;
ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_4 TABLESPACE USERS;
...ALTER TABLE table_1 MOVE SUBPARTITION part_1_SUBPART_10 TABLESPACE USERS;


然后在执行下面的:

ALTER TABLE table_1 MODIFY DEFAULT ATTRIBUTES FOR PARTITION part_1
TABLESPACE USERS;


这是结果:



现在这个分区被转移到了users中。

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

ALTER TABLE table_1 MOVE PARTITION part_1 TABLESPACE USERS;


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

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

ALTER TABLE table_1 MOVE PARTITION part_1 COMPRESS;


结果如下:



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



相同的问题再次出现。也就是说得把子分区先压缩了。但是我今天看到了一个更好用的语句:

ALTER TABLE table_1 MODIFY PARTITION part_1 COMPRESS;


执行以后结果:



这样就好了。

今天建立表分区的时候有点忘了语句的写法,这是不对的,这里记录一下:

CREATE TABLESPACE data_warehouse
DATAFILE 'D:\app\user\oradata\PC1\STORAGE2.DBF'
SIZE 50M AUTOEXTEND ON NEXT 50M
MAXSIZE 2048M;


将用户默认表空间改成刚才建立的表空间:

ALTER USER wings DEFAULT TABLESPACE data_warehouse;




欢迎各位oracle爱好者加入我们的交流群:120244471。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: