Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1244452
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Mysql/postgreSQL

2013-04-25 10:43:59

合并两个分区成一个,适用于除hash之外的其它所有分区形式(hash分区有coalesce partition的嘛,前头刚刚讲过)。

语法很简单:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3;

同样也支持update indexes子句以避免单独执行造成索引失效的问题。

需要注意一点,要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的,如例:

JSSWEB> alter table t_partition_range merge partitions t_range_p1,t_range_p2

  2  into partition t_range_pnew;

表已更改。

JSSWEB> select table_name,partition_name,high_value from user_tab_partitions

  2  where table_name='T_PARTITION_RANGE';

TABLE_NAME                     PARTITION_NAME                 HIGH_VALUE

------------------------------ ------------------------------ ----------------

T_PARTITION_RANGE              T_RANGE_P3                     30

T_PARTITION_RANGE              T_RANGE_PMAX                   MAXVALUE

T_PARTITION_RANGE              T_RANGE_PNEW                   20

JSSWEB> select *from t_partition_range partition(t_range_pnew);

        ID NAME

---------- --------------------------------------------------

        11 a

        12 b

        13 c

         8 g

可见,合并分区操作不会造成数据丢失,另外如果你想为新分区指定属性的话,在语句末尾处增加存储属性即可(如果不指定,则新分区默认继续表的存储属性)。例如:

JSSWEB> select partition_name,high_value,tablespace_name from user_tab_partitions

  2  where table_name='T_PARTITION_LIST';

PARTITION_NAME    HIGH_VALUE                      TABLESPACE_NAME

--------------------        -------------------------------------------------- ---------------

T_LIST_P1            1, 2, 3, 4, 5, 6, 7, 8, 9, 10              TBSPART01

T_LIST_P2            11, 12, 13, 14, 15, 16, 17, 18, 19, 20     TBSPART02

T_LIST_P3            21, 22, 23, 24, 25, 26, 27, 28, 29, 30     TBSPART03

T_LIST_PD            default                            TBSPART04

JSSWEB> alter table t_partition_list merge partitions t_list_p2,t_list_p3

  2  into partition t_list_p2 tablespace tbspart02;

表已更改。

JSSWEB> select partition_name,high_value,tablespace_name from user_tab_partitions

  2  where table_name='T_PARTITION_LIST';

PARTITION_NAME   HIGH_VALUE                                TABLESPACE_NAME

--------------------       --------------------------------------------------           ---------------

T_LIST_P1            1, 2, 3, 4, 5, 6, 7, 8, 9, 10                      TBSPART01

T_LIST_P2            21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 11, 12, 13    TBSPART02

                     , 14, 15, 16, 17, 18, 19, 20

T_LIST_PD            default                                    TBSPART04

注意,merge分区操作与coalesce分区操作一样,视被合并的分区数据量多少,都可能涉及到大量的IO操作。

其它合并组合分区的操作与上类似,如果要合并组合分区,注意关键字是merge subpartitions,这里就不做演示了。

 

=====================================

查看前面的连载:

(10)--交换表分区

(9)--删除表分区

(8)--增加和收缩表分区

(7)--怎样管理

(6)--创建range-list组合分区

(5)--创建range-hash组合分区(1)

(4)--创建list分区

(3)--创建hash分区

(2)--创建range分区

(1)--前言


阅读(1048) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~