全面学习分区表及分区索引(11)--合并表分区
合并两个分区成一个,适用于除hash之外的其它所有分区形式(hash分区有coalesce partition的嘛,前头刚刚讲过)。
语法很简单:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3;
同样也支持update indexes子句以避免单独执行造成索引失效的问题。
需要注意一点,要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的,如例:
SQL> select table_owner ,table_name,partition_name,high_value
2 from dba_tab_partitions
3 where table_name = 'T_PART_RANGE';
TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------
KARL T_PART_RANGE T_RANGE_P1 10
KARL T_PART_RANGE T_RANGE_P2 20
KARL T_PART_RANGE T_RANGE_P3 MAXVALUE
SQL> alter table t_part_range merge partitions t_range_p2,t_range_p3 into partition t_range_max;
Table altered
SQL> select table_owner ,table_name,partition_name,high_value
2 from dba_tab_partitions
3 where table_name = 'T_PART_RANGE';
TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------
KARL T_PART_RANGE T_RANGE_MAX MAXVALUE
KARL T_PART_RANGE T_RANGE_P1 10
SQL> select * from t_part_range partition(t_range_max);
ID NAME
---------- ----------
8 no vaild.. //查看MAX分区,这个8 是上一节中 利用交换分区 + without validation 获得的。原来在第二个分区中的数据。
SQL> select partition_name ,high_value ,tablespace_name
2 from dba_tab_partitions
3 where table_name = 'T_PART_RANGE';
PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------------------------------------------------------------------- ------------------------------
T_RANGE_MAX MAXVALUE KARL_SPACE
T_RANGE_P1 10 PART01
KARL_SAPCE //该TALBESPACE是原来创建建分区t_range_p3时没有指定TABLESPACE,所以默认指定的T_RANGE_MAX。
所以当
partition_name tablespace
--------------- ---------------------
t_range_p2 part02
t_range_p3 KARL_SPACE
做merge操作后。变成......
partition_name tablespace
--------------- ---------------------
t_range_MAX KARL_SPACE
注意,merge分区操作与coalesce分区操作一样,视被合并的分区数据量多少,都可能涉及到大量的IO操作。
其它合并组合分区的操作与上类似,如果要合并组合分区,注意关键字是merge subpartitions,这里就不做演示
合并两个分区成一个,适用于除hash之外的其它所有分区形式(hash分区有coalesce partition的嘛,前头刚刚讲过)。
语法很简单:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3;
同样也支持update indexes子句以避免单独执行造成索引失效的问题。
需要注意一点,要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的,如例:
SQL> select table_owner ,table_name,partition_name,high_value
2 from dba_tab_partitions
3 where table_name = 'T_PART_RANGE';
TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------
KARL T_PART_RANGE T_RANGE_P1 10
KARL T_PART_RANGE T_RANGE_P2 20
KARL T_PART_RANGE T_RANGE_P3 MAXVALUE
SQL> alter table t_part_range merge partitions t_range_p2,t_range_p3 into partition t_range_max;
Table altered
SQL> select table_owner ,table_name,partition_name,high_value
2 from dba_tab_partitions
3 where table_name = 'T_PART_RANGE';
TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
------------------------------ ------------------------------ ------------------------------ --------------------------------------------------------------------------------
KARL T_PART_RANGE T_RANGE_MAX MAXVALUE
KARL T_PART_RANGE T_RANGE_P1 10
SQL> select * from t_part_range partition(t_range_max);
ID NAME
---------- ----------
8 no vaild.. //查看MAX分区,这个8 是上一节中 利用交换分区 + without validation 获得的。原来在第二个分区中的数据。
SQL> select partition_name ,high_value ,tablespace_name
2 from dba_tab_partitions
3 where table_name = 'T_PART_RANGE';
PARTITION_NAME HIGH_VALUE TABLESPACE_NAME
------------------------------ -------------------------------------------------------------------------------- ------------------------------
T_RANGE_MAX MAXVALUE KARL_SPACE
T_RANGE_P1 10 PART01
KARL_SAPCE //该TALBESPACE是原来创建建分区t_range_p3时没有指定TABLESPACE,所以默认指定的T_RANGE_MAX。
所以当
partition_name tablespace
--------------- ---------------------
t_range_p2 part02
t_range_p3 KARL_SPACE
做merge操作后。变成......
partition_name tablespace
--------------- ---------------------
t_range_MAX KARL_SPACE
注意,merge分区操作与coalesce分区操作一样,视被合并的分区数据量多少,都可能涉及到大量的IO操作。
其它合并组合分区的操作与上类似,如果要合并组合分区,注意关键字是merge subpartitions,这里就不做演示