2、收缩表分区(coalesce partitions)
收缩表分区仅适用于 hash 分区或复合分区的 hash 子分区,执行之后会自动收缩当前的表分区;但是对于分区表
如果只有一个分区,则执行收缩操作会报错。
语法:alter table tbname coalesce partition;
注意:收缩的只是分区,并不影响数据;但是视被收缩分区中数据的多少,收缩表分区也会涉及到IO操作;
如果执行时没有指定 update indexes 子句,收缩过程中有数据改动的分区其 local 和 global 索引都会失效。
3、删除表分区(drop partition)
除 hash 分区和 hash 子分区外,其他的分区格式都支持删除表分区操作。
语法:
删除分区: alter table tbname drop partition partition_name;
删除子分区:alter table tbname drop subpartition subpartition_name;
注意:删除表分区会将数据一起删除,所以速度非常迅速;如果执行时没有指定 update indexes 子句,会导致global
索引失效;由于删除分区时对应索引分区会被同时删除,但其他分区 local 索引不受影响因此也不会失效。
4、交换表分区(exchange partitions)
交换表分区适用于所有分区格式,即可以将数据从分区表迁移至非分区表,也可以从非分区表迁移至分区表,或者从
hash 分区到 range 分区等。
语法:
alter table tbname1 exchange partition/subpartition ptname1 with table tbname2 [partition/subpartition ptname2];
5、合并表分区(merge partitions)
合并分区适用于除 hash 之外的其他所有分区形式(hash 分区有 coalesce partition)
注意要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的。合并后的分区存储属性可以继承表的存储属性
也可以自定义。合并表分区不会丢失数据。另外 merge 分区操作视移动数据量,可能涉及到io操作。
语法:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3;
6、拆分表分区(split partition)
将一个分区拆分成两个。
语法:
range:alter table tbname split partition ptname at (value) into (partition newpt1 tbs_clause,partition newpt2 tbs_clause);
list:alter table tbname split partition ptname values (v1,v2...vn) into (partition newpt1 tbs_clause,partition newpt2 tbs_clause);
旧分区中符合新定义值的记录会存储到指定的第一个分区中,其他的记录存储到第二个分区中。
7、修改 list 表分区-add values
仅适用于 list 分区或 list 子分区,用来增加指定分区的 value 值。
语法:alter table tbname modify partition/subpartition ptname add values (v1,v2,v3,...vn);
注意:要添加的新 value 值不能存在于当前任何分区中;增加新的列表值不影响原有记录,对索引没有影响。
8、修改 list 表分区-drop values
仅适用于 list 分区或 list 子分区。用来删除指定分区的 value 值。
语法:alter table tbname modify partition/subpartition ptname drop values (v1,v2,v3,...vn);
注意:删除 list 分区 value 列值的时候,必须确保当前分区存在指定的 value 值;要保证修改 list 表分区时该分区没有值。
9、截断分区(truncate partition)
如果该表有外键约束,则只能用 delete ... cascade 或先将外键 disable 然后再 truncate。在不指定 update indexes
情况下,truncate partition 也会使 global 或 local 索引失效。
语法:
alter table tbname truncate partition/subpartition [sub]partition_name;
10、移动表分区(move partition)
移动表分区,比如可以修改分区所在表空间等等。如果没有指定 update indexes ,被移动分区所在 local 或 global 索引会失效。
语法:
alter table tbname move partition/subpartition ptname tablespace tablespace_name;
11、重命名表分区(rename partition)
语法:
alter table tbname rename partition/subpartition ptname to newptname;
12、修改表分区默认属性(modify default attribute)
修改表或表中分区的存储参数,对当前表或分区的存储参数没有影响,只有修改过后,再添加分区时不指定新分区的情况下,
新分区默认是修改后的默认存储参数。
两种方法:
修改表属性:alter table tbname modify default attributes tablespace tablespacename;
修改分区属性:alter table ptname modify default attributes for partition/subpartition ptname tablespace tablespacename;
13、修改表分区当前属性(modify partition)
该命令修改的不是默认属性,而是分区当前的属性,修改即生效,但是不能修改所在表空间。
14、修改子分区模板(set subpartition template)
修改子分区模板不会改变当前分区结构,只有当再增加、合并分区且未显示指定子分区存储参数的时候才有效。
语法:
alter table tbname set subpartition template(...);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24496749/viewspace-1038001/ ,如需转载,请注明出处,否则将追究法律责任。