本文檔介紹了如何對錶的部分分區、全部分區及其所有的子分區重新組織分區結構,並且不遺失資料的方法。
文法
ALTER TABLE…REORGANIZE PARTITION命令用於對錶的部分分區、全部分區及其所有的子分區重新組織分區結構,並且不遺失資料:
ALTER TABLE table_name
REORGANIZE PARTITION partition_names INTO (partition_definitions)
其中,partition_definitions
為:
{list_partition | range_partition}
list_partition
為:PARTITION partition_name VALUES IN (value[, value]...) (subpartition, ...)
range_partition
為:PARTITION partition_name VALUES LESS THAN (value[, value]...) (subpartition, ...)
其中,subpartition
為:
{list_subpartition | range_subpartition | hash_partition | key_partition}
list_subpartition
為:SUBPARTITION [subpartition_name] VALUES IN (value[, value]...) [TABLESPACE tablespace_name]
range_subpartition
為:SUBPARTITION [subpartition_name ] VALUES LESS THAN (value[, value]...) [TABLESPACE tablespace_name]
hash/key_subpartition
為:SUBPARTITION [subpartition_name ] [TABLESPACE tablespace_name]
參數
參數 | 說明 |
table_name | 表名。 |
list_partition | 需要更改的一個或多個現有分區的名稱列表,以逗號分隔。 |
partition_definitions | 以逗號分隔的新分區定義列表。 |
partition_name | 需要建立的分區名稱。 說明 分區名稱在所有分區和子分區中必須是唯一的,且必須遵循給物件識別碼命名的慣例。 |
subpartition_name | 需要建立的子分區名稱。 說明 子分區名稱在所有分區和子分區中必須是唯一的,且必須遵循給物件識別碼命名的慣例。 |
樣本
拆分
sales_range_range
表分區p0
為p0_1
、p0_2
,及其對應的所有子分區:ALTER TABLE sales_range_range REORGANIZE PARTITION p0 INTO ( PARTITION p0_1 VALUES LESS THAN (500)( SUBPARTITION q1_2021_1 VALUES LESS THAN(200), SUBPARTITION q2_2021_1 VALUES LESS THAN(300), SUBPARTITION q3_2021_1 VALUES LESS THAN(400), SUBPARTITION q4_2021_1 VALUES LESS THAN(500) ), PARTITION p0_2 VALUES LESS THAN (1000)( SUBPARTITION q1_2021_2 VALUES LESS THAN(600), SUBPARTITION q2_2021_2 VALUES LESS THAN(700), SUBPARTITION q3_2021_2 VALUES LESS THAN(800), SUBPARTITION q4_2021_2 VALUES LESS THAN(1000) ) );
拆分
sales_range_hash
表分區p1為p1_1
、p1_2
,及其對應的所有子分區:ALTER TABLE sales_range_hash REORGANIZE PARTITION p1 INTO ( PARTITION p1_1 VALUES LESS THAN ('2022-12-01')( SUBPARTITION s0_1 VALUES LESS THAN ('2022-12-05'), SUBPARTITION s1_1 VALUES LESS THAN ('2022-12-10'), SUBPARTITION s2_1 VALUES LESS THAN ('2022-12-15') ), PARTITION p1_2 VALUES LESS THAN ('2023-01-01')( SUBPARTITION s0_2 VALUES LESS THAN ('2022-12-20'), SUBPARTITION s1_2 VALUES LESS THAN ('2022-12-25'), SUBPARTITION s2_2 VALUES LESS THAN ('2022-12-30') ) );
修改3個分區
p0
、p1
、p2
為q1
、q2
和q3
:ALTER TABLE sales_list_hash REORGANIZE PARTITION p0,p1,p2 INTO ( PARTITION q1 VALUES in (1,2)( SUBPARTITION s0, SUBPARTITION s1 ), PARTITION q2 VALUES in (3,4)( SUBPARTITION s3, SUBPARTITION s4 ), PARTITION q3 VALUES in (5,6)( SUBPARTITION s5, SUBPARTITION s6 ) );