华为云用户手册

  • 对二级分区表重命名二级分区 使用ALTER TABLE RENAME SUBPARTITION可以对二级分区表重命名二级分区。 例如,通过指定分区名将二级分区表range_list_sales的分区date_202001_channel1重命名。 ALTER TABLE range_list_sales RENAME SUBPARTITION date_202001_channel1 TO date_202001_channelnew; 或者,通过指定分区值将二级分区表range_list_sales中('2020-01-08', '0')所对应的分区重命名。 ALTER TABLE range_list_sales RENAME SUBPARTITION FOR ('2020-01-08', '0') TO date_202001_channelnew; 父主题: 重命名分区
  • 对一级分区表重命名分区 使用ALTER TABLE RENAME PARTITION可以对一级分区表重命名分区。 例如,通过指定分区名将范围分区表range_sales的分区date_202001重命名。 ALTER TABLE range_sales RENAME PARTITION date_202001 TO date_202001_new; 或者,通过指定分区值将列表分区表list_sales中'0'所对应的分区重命名。 ALTER TABLE list_sales RENAME PARTITION FOR ('0') TO channel_new; 父主题: 重命名分区
  • 对二级分区表移动二级分区 使用ALTER TABLE MOVE SUBPARTITION可以对二级分区表移动二级分区。 例如,通过指定分区名将二级分区表range_list_sales的分区date_202001_channel1移动到表空间tb1中。 ALTER TABLE range_list_sales MOVE SUBPARTITION date_202001_channel1 TABLESPACE tb1; 或者,通过指定分区值将二级分区表range_list_sales中('2020-01-08', '0')所对应的分区移动到表空间tb1中。 ALTER TABLE range_list_sales MOVE SUBPARTITION FOR ('2020-01-08', '0') TABLESPACE tb1; 父主题: 移动分区
  • 对一级分区表移动分区 使用ALTER TABLE MOVE PARTITION可以对一级分区表移动分区。 例如,通过指定分区名将范围分区表range_sales的分区date_202001移动到表空间tb1中。 ALTER TABLE range_sales MOVE PARTITION date_202001 TABLESPACE tb1; 或者,通过指定分区值将列表分区表list_sales中'0'所对应的分区移动到表空间tb1中。 ALTER TABLE list_sales MOVE PARTITION FOR ('0') TABLESPACE tb1; 父主题: 移动分区
  • 对二级分区表合并二级分区 使用ALTER TABLE MERGE SUBPARTITIONS可以将多个二级分区合并为一个分区。 例如,将二级分区表hash_list_sales的分区product1_channel1、product1_channel2、product1_channel3合并为一个新的分区,并更新Global索引。 ALTER TABLE hash_list_sales MERGE SUBPARTITIONS product1_channel1, product1_channel2, product1_channel3 INTO SUBPARTITION product1_channel1 UPDATE GLOBAL INDEX; 父主题: 合并分区
  • 对一级分区表合并分区 使用ALTER TABLE MERGE PARTITIONS可以将多个分区合并为一个分区。 例如,将范围分区表range_sales的分区date_202001和date_202002合并为一个新的分区,并更新Global索引。 ALTER TABLE range_sales MERGE PARTITIONS date_202001, date_202002 INTO PARTITION date_2020_old UPDATE GLOBAL INDEX; 对间隔分区表的间隔分区完成合并分区操作之后,源分区之前的间隔分区会变成范围分区。 父主题: 合并分区
  • 合并分区 用户可以使用合并分区的命令来将多个分区合并为一个分区。合并分区只能通过指定分区名来进行,不支持指定分区值的写法。 合并分区不能作用于哈希分区上。 执行合并分区命令会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,或者用户自行重建Global索引。 合并后的新分区,对于范围/间隔分区,可以与最后一个源分区名字相同,比如将p1,p2合并为p2;对于列表分区,可以与任一源分区名字相同,比如将p1,p2合并为p1。 如果新分区与源分区名字相同,数据库会将新分区视为对源分区的继承,这会影响合并期间对源分区查询的行为,具体参考DQL/DML-DDL并发。 对一级分区表合并分区 对二级分区表合并二级分区 父主题: 分区表运维管理
  • 对*-LIST二级分区表分割二级分区 使用ALTER TABLE SPLIT SUBPARTITION可以对*-LIST二级分区表分割二级分区。 例如,假设*-LIST二级分区表hash_list_sales的二级分区product2_channel2的定义范围为DEFAULT。可以指定分割点将其分割为两个分区,并更新Global索引。 ALTER TABLE hash_list_sales SPLIT SUBPARTITION product2_channel2 VALUES ('6', '7', '8', '9') INTO ( SUBPARTITION product2_channel2_p1, --第一个分区范围是('6', '7', '8', '9') SUBPARTITION product2_channel2_p2 --第二个分区范围是DEFAULT ) UPDATE GLOBAL INDEX; 或者,不指定分割点,将分区product2_channel2分割为多个分区,并更新Global索引。 ALTER TABLE hash_list_sales SPLIT SUBPARTITION product2_channel2 INTO ( SUBPARTITION product2_channel2_p1 VALUES ('6', '7', '8'), SUBPARTITION product2_channel2_p2 VALUES ('9', '10'), SUBPARTITION product2_channel2_p3 --第三个分区范围是DEFAULT ) UPDATE GLOBAL INDEX; 又或者,通过指定分区值而不是指定分区名来分割分区。 ALTER TABLE hash_list_sales SPLIT SUBPARTITION FOR (1200, '6') VALUES ('6', '7', '8', '9') INTO ( SUBPARTITION product2_channel2_p1, --第一个分区范围是('6', '7', '8', '9') SUBPARTITION product2_channel2_p2 --第二个分区范围是DEFAULT ) UPDATE GLOBAL INDEX; 若对DEFAULT分区进行分割,前面几个分区不能申明DEFAULT范围,最后一个分区会继承DEFAULT分区范围。 父主题: 分割分区
  • 对*-RANGE二级分区表分割二级分区 使用ALTER TABLE SPLIT SUBPARTITION可以对*-RANGE二级分区表分割二级分区。 例如,假设*-RANGE二级分区表list_range_sales的二级分区channel1_customer4的定义范围为[1000, MAXVALUE)。可以指定分割点1200将二级分区channel1_customer4分割为两个分区,并更新Global索引。 ALTER TABLE list_range_sales SPLIT SUBPARTITION channel1_customer4 AT (1200) INTO ( SUBPARTITION channel1_customer4_p1, --第一个分区上界是1200 SUBPARTITION channel1_customer4_p2 --第二个分区上界是MAXVALUE ) UPDATE GLOBAL INDEX; 或者,不指定分割点,将分区channel1_customer4分割为多个分区,并更新Global索引。 ALTER TABLE list_range_sales SPLIT SUBPARTITION channel1_customer4 INTO ( SUBPARTITION channel1_customer4_p1 VALUES LESS THAN (1200), SUBPARTITION channel1_customer4_p2 VALUES LESS THAN (1400), SUBPARTITION channel1_customer4_p3 --第三个分区上界是MAXVALUE )UPDATE GLOBAL INDEX; 又或者,通过指定分区值而不是指定分区名来分割分区。 ALTER TABLE range_sales SPLIT SUBPARTITION FOR ('1', 1200) AT (1200) INTO ( PARTITION channel1_customer4_p1, PARTITION channel1_customer4_p2 ) UPDATE GLOBAL INDEX; 若对MAXVALUE分区进行分割,前面几个分区不能申明MAXVALUE范围,最后一个分区会继承MAXVALUE分区范围。 父主题: 分割分区
  • 对列表分区表分割分区 使用ALTER TABLE SPLIT PARTITION可以对列表分区表分割分区。 例如,假设列表分区表list_sales的分区channel2定义范围为('6', '7', '8', '9')。可以指定分割点('6', '7')将分区channel2分割为两个分区,并更新Global索引。 ALTER TABLE list_sales SPLIT PARTITION channel2 VALUES ('6', '7') INTO ( PARTITION channel2_1, --第一个分区范围是('6', '7') PARTITION channel2_2 --第二个分区范围是('8', '9') ) UPDATE GLOBAL INDEX; 或者,不指定分割点,将分区channel2分割为多个分区,并更新Global索引。 ALTER TABLE list_sales SPLIT PARTITION channel2 INTO ( PARTITION channel2_1 VALUES ('6'), PARTITION channel2_2 VALUES ('8'), PARTITION channel2_3 --第三个分区范围是('7', '9') )UPDATE GLOBAL INDEX; 又或者,通过指定分区值而不是指定分区名来分割分区。 ALTER TABLE list_sales SPLIT PARTITION FOR ('6') VALUES ('6', '7') INTO ( PARTITION channel2_1, --第一个分区范围是('6', '7') PARTITION channel2_2 --第二个分区范围是('8', '9') ) UPDATE GLOBAL INDEX; 若对DEFAULT分区进行分割,前面几个分区不能申明DEFAULT范围,最后一个分区会继承DEFAULT分区范围。 父主题: 分割分区
  • 对间隔分区表分割分区 对间隔分区表分割分区的命令与范围分区表相同。 对间隔分区表的间隔分区完成分割分区操作之后,源分区之前的间隔分区会变成范围分区。 例如,创建如下间隔分区表,并插入数据新增三个分区sys_p1、sys_p2、sys_p3。 CREATE TABLE interval_sales ( prod_id NUMBER(6), cust_id NUMBER, time_id DATE, channel_id CHAR(1), promo_id NUMBER(6), quantity_sold NUMBER(3), amount_sold NUMBER(10, 2) ) PARTITION BY RANGE (TIME_ID) INTERVAL ('1 MONTH') ( PARTITION date_2015 VALUES LESS THAN ('2016-01-01'), PARTITION date_2016 VALUES LESS THAN ('2017-01-01'), PARTITION date_2017 VALUES LESS THAN ('2018-01-01'), PARTITION date_2018 VALUES LESS THAN ('2019-01-01'), PARTITION date_2019 VALUES LESS THAN ('2020-01-01') ); INSERT INTO interval_sales VALUES (263722,42819872,'2020-07-09','E',432072,213,17); --新增分区sys_p1 INSERT INTO interval_sales VALUES (345724,72651233,'2021-03-05','A',352451,146,9); --新增分区sys_p2 INSERT INTO interval_sales VALUES (153241,65143129,'2021-05-07','H',864134,89,34); --新增分区sys_p3 如果对分区sys_p2进行分割,则会将分区sys_p1变为范围分区,分区范围下界值从依赖间隔分区值变成依赖前一个分区的上界值,也就是分区范围从['2020-07-01', '2020-08-01')变成['2020-01-01', '2020-08-01');分区sys_p3依然为间隔分区,其分区范围为['2021-05-01', '2021-06-01')。 父主题: 分割分区
  • 对范围分区表分割分区 使用ALTER TABLE SPLIT PARTITION可以对范围分区表分割分区。 例如,假设范围分区表range_sales的分区date_202001定义范围为['2020-01-01', '2020-02-01')。可以指定分割点'2020-01-16'将分区date_202001分割为两个分区,并更新Global索引。 ALTER TABLE range_sales SPLIT PARTITION date_202001 AT ('2020-01-16') INTO ( PARTITION date_202001_p1, --第一个分区上界是'2020-01-16' PARTITION date_202001_p2 --第二个分区上界是'2020-02-01' ) UPDATE GLOBAL INDEX; 或者,不指定分割点,将分区date_202001分割为多个分区,并更新Global索引。 ALTER TABLE range_sales SPLIT PARTITION date_202001 INTO ( PARTITION date_202001_p1 VALUES LESS THAN ('2020-01-11'), PARTITION date_202001_p2 VALUES LESS THAN ('2020-01-21'), PARTITION date_202001_p3 --第三个分区上界是'2020-02-01' )UPDATE GLOBAL INDEX; 又或者,通过指定分区值而不是指定分区名来分割分区。 ALTER TABLE range_sales SPLIT PARTITION FOR ('2020-01-15') AT ('2020-01-16') INTO ( PARTITION date_202001_p1, --第一个分区上界是'2020-01-16' PARTITION date_202001_p2 --第二个分区上界是'2020-02-01' ) UPDATE GLOBAL INDEX; 若对MAXVALUE分区进行分割,前面几个分区不能申明MAXVALUE范围,最后一个分区会继承MAXVALUE分区范围。 父主题: 分割分区
  • 分割分区 用户可以使用分割分区的命令来将一个分区分割为两个或多个新分区。当分区数据太大,或者需要对有MAXVALUE的范围分区/DEFAULT的列表分区新增分区时,可以考虑执行该操作。分割分区可以指定分割点将一个分区分割为两个新分区,也可以不指定分割点将一个分区分割为多个新分区。分割分区可以通过指定分区名或者分区值来进行。 分割分区不能作用于哈希分区上。 不支持对二级分区表的一级分区进行分割。 执行分割分区命令会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,或者用户自行重建Global索引。 分割后的新分区,可以与源分区名字相同,比如将分区p1分割为p1,p2。但数据库不会将分割前后相同名的分区视为同一个分区,这会影响分割期间对源分区p1查询,具体参考DQL/DML-DDL并发。 对范围分区表分割分区 对间隔分区表分割分区 对列表分区表分割分区 对*-RANGE二级分区表分割二级分区 对*-LIST二级分区表分割二级分区 父主题: 分区表运维管理
  • 对二级分区表清空二级分区 使用ALTER TABLE TRUNCATE SUBPARTITION可以清空二级分区表的一个二级分区。 例如,通过指定分区名清空二级分区表range_list_sales的二级分区date_202005_channel1,并更新Global索引。 ALTER TABLE range_list_sales TRUNCATE SUBPARTITION date_202005_channel1 UPDATE GLOBAL INDEX; 或者,通过指定分区值来清空二级分区表range_list_sales中('2020-05-08', '0')所对应的二级分区。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_list_sales TRUNCATE SUBPARTITION FOR ('2020-05-08', '0'); 父主题: 清空分区
  • 对二级分区表清空一级分区 使用ALTER TABLE TRUNCATE PARTITION可以清空二级分区表的一个一级分区,数据库会将这个一级分区下的所有二级分区都进行清空。 例如,通过指定分区名清空二级分区表range_list_sales的一级分区date_202005,并更新Global索引。 ALTER TABLE range_list_sales TRUNCATE PARTITION date_202005 UPDATE GLOBAL INDEX; 或者,通过指定分区值来清空二级分区表range_list_sales中('2020-05-08')所对应的一级分区。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_list_sales TRUNCATE PARTITION FOR ('2020-05-08'); 父主题: 清空分区
  • 对一级分区表清空分区 使用ALTER TABLE TRUNCATE PARTITION可以清空指定分区表的任何一个分区。 例如,通过指定分区名清空范围分区表range_sales的分区date_202005,并更新Global索引。 ALTER TABLE range_sales TRUNCATE PARTITION date_202005 UPDATE GLOBAL INDEX; 或者,通过指定分区值来清空范围分区表range_sales中'2020-05-08'所对应的分区。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_sales TRUNCATE PARTITION FOR ('2020-05-08'); 父主题: 清空分区
  • 清空分区 用户可以使用清空分区的命令来快速清空分区的数据。与删除分区功能类似,区别在于清空分区只会删除分区中的数据,分区的定义和物理文件都会保留。清空分区可以通过指定分区名或者分区值来进行。 执行清空分区命令会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,或者用户自行重建Global索引。 对一级分区表清空分区 对二级分区表清空一级分区 对二级分区表清空二级分区 父主题: 分区表运维管理
  • 对二级分区表交换二级分区 使用ALTER TABLE EXCHANGE SUBPARTITION可以对二级分区表交换二级分区。 例如,通过指定分区名将二级分区表range_list_sales的二级分区date_202001_channel1和普通表exchange_sales进行交换,不进行分区键校验,并更新Global索引。 ALTER TABLE range_list_sales EXCHANGE SUBPARTITION (date_202001_channel1) WITH TABLE exchange_sales WITHOUT VALIDATION UPDATE GLOBAL INDEX; 或者,通过指定分区值将二级分区表range_list_sales中('2020-01-08', '0')所对应的二级分区和普通表exchange_sales进行交换,进行分区校验并将不满足目标分区约束的数据插入到分区表的其他分区中。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_list_sales EXCHANGE SUBPARTITION FOR ('2020-01-08', '0') WITH TABLE exchange_sales WITH VALIDATION VERBOSE; 不支持对二级分区表的一级分区交换分区。 父主题: 交换分区
  • 对一级分区表交换分区 使用ALTER TABLE EXCHANGE PARTITION可以对一级分区表交换分区。 例如,通过指定分区名将范围分区表range_sales的分区date_202001和普通表exchange_sales进行交换,不进行分区键校验,并更新Global索引。 ALTER TABLE range_sales EXCHANGE PARTITION (date_202001) WITH TABLE exchange_sales WITHOUT VALIDATION UPDATE GLOBAL INDEX; 或者,通过指定分区值将范围分区表range_sales中'2020-01-08'所对应的分区和普通表exchange_sales进行交换,进行分区校验并将不满足目标分区约束的数据插入到分区表的其他分区中。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_sales EXCHANGE PARTITION FOR ('2020-01-08') WITH TABLE exchange_sales WITH VALIDATION VERBOSE; 父主题: 交换分区
  • 交换分区 用户可以使用交换分区的命令来将分区与普通表的数据进行交换。交换分区可以快速将数据导入/导出分区表,实现数据高效加载的目的。在业务迁移的场景,使用交换分区比常规导入会快很多。交换分区可以通过指定分区名或者分区值来进行。 执行交换分区命令会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,或者用户自行重建Global索引。 执行交换分区时,可以申明WITH/WITHOUT VALIDATION,表明是否校验普通表数据满足目标分区的分区键约束规则(默认校验)。数据校验活动开销较大,如果能确保交换的数据属于目标分区,可以申明WITHOUT VALIDATION来提高交换性能。 可以申明WITH VALIDATION VERBOSE,此时数据库会校验普通表的每一行,将不满足目标分区的分区键约束规则的数据,插入到分区表的其他分区中,最后再进行普通表与目标分区的交换。 例如,给出如下分区定义和普通表exchange_sales的数据分布,并将分区DATE_202001和普通表exchange_sales做交换,则根据申明子句的不同,存在以下三种行为: 申明WITHOUT VALIDATION,数据全部交换到分区DATE_202001中,由于'2020-02-03', '2020-04-08'不满足分区DATE_202001的范围约束,后续业务可能会出现异常。 申明WITH VALIDATION,由于'2020-02-03', '2020-04-08'不满足分区DATE_202001的范围约束,数据库给出相应的报错。 申明WITH VALIDATION VERBOSE,数据库会将'2020-02-03'插入分区DATE_202002,将'2020-04-08'插入分区DATE_202004,再将剩下的数据交换到分区DATE_202001中。 --分区定义 PARTITION DATE_202001 VALUES LESS THAN ('2020-02-01'), PARTITION DATE_202002 VALUES LESS THAN ('2020-03-01'), PARTITION DATE_202003 VALUES LESS THAN ('2020-04-01'), PARTITION DATE_202004 VALUES LESS THAN ('2020-05-01') -- exchange_sales的数据分布 ('2020-01-15', '2020-01-17', '2020-01-23', '2020-02-03', '2020-04-08') 如果交换的数据不完全属于目标分区,请不要申明WITHOUT VALIDATION交换分区,否则会破坏分区约束规则,导致分区表后续DML业务结果异常。 进行交换的普通表和分区必须满足如下条件: 普通表和分区的列数目相同,对应列的信息严格一致。 普通表和分区的表压缩信息严格一致。 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。 普通表不可以是临时表。 普通表和分区表上不可以有动态数据脱敏,行访问控制约束。 对一级分区表交换分区 对二级分区表交换二级分区 父主题: 分区表运维管理
  • 对二级分区表删除二级分区 使用ALTER TABLE DROP SUBPARTITION可以删除二级分区表的一个二级分区,这个行为可以作用在二级分区策略为RANGE或者LIST的情况。 例如,通过指定分区名删除二级分区表range_list_sales的二级分区date_202005_channel1,并更新Global索引。 ALTER TABLE range_list_sales DROP SUBPARTITION date_202005_channel1 UPDATE GLOBAL INDEX; 或者,通过指定分区值来删除二级分区表range_list_sales中('2020-05-08', '0')所对应的二级分区。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_list_sales DROP SUBPARTITION FOR ('2020-05-08', '0'); 当二级分区表所删除的目标分区只有一个二级分区时,不支持通过ALTER TABLE DROP SUBPARTITION命令删除二级分区。 当二级分区表的二级分区策略为HASH时,不支持通过ALTER TABLE DROP SUBPARTITION命令删除二级分区。 父主题: 删除分区
  • 对二级分区表删除一级分区 使用ALTER TABLE DROP PARTITION可以删除二级分区表的一个一级分区,这个行为可以作用在一级分区策略为RANGE或者LIST的情况。数据库会将这个一级分区,以及一级分区下的所有二级分区都删除。 例如,通过指定分区名删除二级分区表range_list_sales的一级分区date_202005,并更新Global索引。 ALTER TABLE range_list_sales DROP PARTITION date_202005 UPDATE GLOBAL INDEX; 或者,通过指定分区值来删除二级分区表range_list_sales中('2020-05-08')所对应的一级分区。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_list_sales DROP PARTITION FOR ('2020-05-08'); 当二级分区表只有一个一级分区时,不支持通过ALTER TABLE DROP PARTITION命令删除一级分区。 当二级分区表的一级分区策略为HASH时,不支持通过ALTER TABLE DROP PARTITION命令删除一级分区。 父主题: 删除分区
  • 对一级分区表删除分区 使用ALTER TABLE DROP PARTITION可以删除指定分区表的任何一个分区,这个行为可以作用在范围分区表、间隔分区表、列表分区表上。 例如,通过指定分区名删除范围分区表range_sales的分区date_202005,并更新Global索引。 ALTER TABLE range_sales DROP PARTITION date_202005 UPDATE GLOBAL INDEX; 或者,通过指定分区值来删除范围分区表range_sales中'2020-05-08'所对应的分区。由于不带UPDATE GLOBAL INDEX子句,执行该命令后Global索引会失效。 ALTER TABLE range_sales DROP PARTITION FOR ('2020-05-08'); 当分区表只有一个分区时,不支持通过ALTER TABLE DROP PARTITION命令删除分区。 当分区表为哈希分区表时,不支持通过ALTER TABLE DROP PARTITION命令删除分区。 父主题: 删除分区
  • 向二级分区表新增二级分区 使用ALTER TABLE MODIFY PARTITION ADD SUBPARTITION可以在二级分区表中新增一个二级分区,这个行为可以作用在二级分区策略为RANGE或者LIST的情况。 例如,对二级分区表range_list_sales的date_202004新增一个二级分区。 ALTER TABLE range_list_sales MODIFY PARTITION date_202004 ADD SUBPARTITION date_202004_channel5 VALUES ('X') TABLESPACE tb2; 当二级分区表的二级分区策略为HASH时,不支持通过ALTER TABLE MODIFY PARTITION ADD SUBPARTITION命令新增二级分区。 父主题: 新增分区
  • 向二级分区表新增一级分区 使用ALTER TABLE ADD PARTITION可以在二级分区表中新增一个一级分区,这个行为可以作用在一级分区策略为RANGE或者LIST的情况。如果这个新增一级分区下申明了二级分区定义,则数据库会根据定义创建对应的二级分区;如果这个新增一级分区下没有申明二级分区定义,则数据库会自动创建一个默认的二级分区。 例如,对二级分区表range_list_sales新增一个一级分区,并在下面创建四个二级分区。 ALTER TABLE range_list_sales ADD PARTITION date_202005 VALUES LESS THAN ('2020-06-01') TABLESPACE tb1 ( SUBPARTITION date_202005_channel1 VALUES ('0', '1', '2'), SUBPARTITION date_202005_channel2 VALUES ('3', '4', '5') TABLESPACE tb2, SUBPARTITION date_202005_channel3 VALUES ('6', '7'), SUBPARTITION date_202005_channel4 VALUES ('8', '9') ); 或者对二级分区表range_list_sales只进行新增一级分区操作。 ALTER TABLE range_list_sales ADD PARTITION date_202005 VALUES LESS THAN ('2020-06-01') TABLESPACE tb1; 上面这种行为与如下SQL语句等价。 ALTER TABLE range_list_sales ADD PARTITION date_202005 VALUES LESS THAN ('2020-06-01') TABLESPACE tb1 ( SUBPARTITION date_202005_channel1 VALUES (DEFAULT) ); 当二级分区表的一级分区策略为HASH时,不支持通过ALTER TABLE ADD PARTITION命令新增一级分区。 父主题: 新增分区
  • 向列表分区表新增分区 使用ALTER TABLE ADD PARTITION可以在列表分区表中新增分区,新增分区的枚举值不能与已有的任一个分区的枚举值重复。 例如,对列表分区表list_sales新增一个分区。 ALTER TABLE list_sales ADD PARTITION channel5 VALUES ('X') TABLESPACE tb1; 当列表分区表有DEFAULT分区时,无法新增分区。可以使用ALTER TABLE SPLIT PARTITION命令分割分区。 父主题: 新增分区
  • 向间隔分区表新增分区 不支持通过ALTER TABLE ADD PARTITION命令向间隔分区表新增分区。当用户插入数据超出现有间隔分区表范围时,数据库会自动根据间隔分区的INTERVAL值创建一个分区。 例如,对间隔分区表interval_sales插入如下数据后,数据库会创建一个分区,该分区范围为['2020-07-01', '2020-08-01'),间隔分区的新增分区命名从sys_p1开始递增。 INSERT INTO interval_sales VALUES (263722,42819872,'2020-07-09','E',432072,213,17); 父主题: 新增分区
  • 向范围分区表新增分区 使用ALTER TABLE ADD PARTITION可以将分区添加到现有分区表的最后面,新增分区的上界值必须大于当前最后一个分区的上界值。 例如,对范围分区表range_sales新增一个分区。 ALTER TABLE range_sales ADD PARTITION date_202005 VALUES LESS THAN ('2020-06-01') TABLESPACE tb1; 当范围分区表有MAXVALUE分区时,无法新增分区。可以使用ALTER TABLE SPLIT PARTITION命令分割分区。分割分区同样适用于需要在现有分区表的前面/中间添加分区的情形,参考对范围分区表分割分区。 父主题: 新增分区
  • 新增分区 用户可以在已建立的分区表中新增分区,来维护新业务的进行。当前各种分区表支持的分区上限为1048575,如果达到了上限则不能继续添加分区。同时需要考虑分区占用内存的开销,分区表使用内存大致为(分区数 * 3 / 1024)MB,分区占用内存不允许大于local_syscache_threshold的值,同时还需要预留部分空间以供其他功能使用。 新增分区不能作用于HASH分区上。 向范围分区表新增分区 向间隔分区表新增分区 向列表分区表新增分区 向二级分区表新增一级分区 向二级分区表新增二级分区 父主题: 分区表运维管理
  • 分区表运维管理 分区表运维管理包括分区管理、分区表管理、分区索引管理和分区表业务并发支持等。 分区管理:也称分区级DDL,包括新增(Add)、删除(Drop)、交换(Exchange)、清空(Truncate)、分割(Split)、合并(Merge)、移动(Move)、重命名(Rename)共8种。 对于哈希分区,涉及分区数的变更会导致数据re-shuffling,故当前 GaussDB Kernel不支持导致Hash分区数变更的操作,包括新增(Add)、删除(Drop)、分割(Split)、合并(Merge)这4种。 涉及分区数据变更的操作会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,包括删除(Drop)、交换(Exchange)、清空(Truncate)、分割(Split)、合并(Merge)这5种。 大部分分区DDL支持partition/subpartition和partition/subpartition for指定分区两种写法,前者需要指定分区名,后者需要指定分区定义范围内的任一分区值。比如假设分区part1的范围定义为[100, 200),那么partition part1和partition for(150)这两种写法是等价的。 不同分区DDL的执行代价各不相同,由于在执行分区DDL过程中目标分区会被锁住,用户需要评估其代价以及对业务的影响。一般而言,分割(Split)、合并(Merge)的执行代价远大于其他分区DDL,与源分区的大小正相关;交换(Exchange)的代价主要源于Global索引的重建和validation校验;移动(Move)的代价限制于磁盘I/O;其余分区DDL的执行代价都很低。 分区表管理:除了继承普通表的功能外,还支持开启/关闭分区表行迁移的功能。 分区索引管理:支持用户设置索引/索引分区不可用,或者重建不可用的索引/索引分区,比如由于分区管理操作导致的Global索引失效场景。 分区表业务并发支持:当分区级DDL与分区DQL/DML作用于不同分区时,支持二者执行层面的并发。 新增分区 删除分区 交换分区 清空分区 分割分区 合并分区 移动分区 重命名分区 分区表行迁移 分区表索引重建/不可用 父主题: 分区表
共100000条