操作系统:中标麒麟高级服务器操作系统软件V7.0U6
部署虚拟机:VMware® Workstation 12 Pro
DM8安装包:培训试用版
DM8安装路径:/dm8
DM8用户:dmdba:dinstall
数据库实例名:DMSERVER
已新建用户:DMTEST
本文介绍使用达梦管理工具维护分区表。
达梦数据库提供了垂直分区和水平分区两种类型的分区表,本文主要介绍水平分区表。
创建范围分区、列表分区、索引分区、间隔分区或组合分区之后,达梦数据库提供不同的管理维护方式。
范围分区:用户可添加分区、删除分区、拆分分区、合并分区、交换分区
列表分区:用户可添加分区、删除分区、交换分区
索引分区:不提供任何后续修改维护操作,如果需要修改分区数只能删除后重建
间隔分区:间隔分区实质上是范围分区,所以修改维护方式同范围分区,本文不做特别介绍
组合分区:组合分区中子表可执行的操作同其子表类型一致。就是说组合分区中的子表如果是范围分区,则修改维护方式同范围分区;如果是列表分区,则修改维护方式同列表分区;如果是索引分区,则不能进行后续修改维护操作
1、范围分区表
1.1、添加分区
添加分区时要求新添加的分区是递增的。
如果已经设置了最后一个分区值为MAXVALUE,则无法添加分区。
例如表SALES6,查看属性,查看DDL
PART_1子表中为SALE_DATE列2001-01-01之前的数据;
PART_2子表中为SALE_DATE列2001-01-01至2010-01-01之间的数据

如果用户需要添加2010-01-01之后的数据,此时会提示:没有找到合适的分区,此时用户应添加分区。

添加分区:
选择SALES6表的子表,右键,选择分区管理,弹出对话框分区管理,可添加分区


查看添加分区的DDL语句:
alter table"DMTEST"."SALES6"
add partition"PART_3" values less than('2020-01-01') storage(initial1, next1, minextents1, fillfactor0);
alter table"DMTEST"."SALES6"
add partition"PART_4" values less than('2030-01-01') storage(initial1, next1, minextents1, fillfactor0);
alter table"DMTEST"."SALES6"
add partition"PART_MAX" values less than(MAXVALUE) storage(initial1, next1, minextents1, fillfactor0);
用户可在图形化界面点击确定添加分区,也可使用DDL语句添加分区。
分区添加后,可查看,如下图。

1.2、删除分区
删除分区一定要慎重,因为删除分区同时将删除该分区表的数据。
删除分区前,需要先查看分区表中数据是否需要保存。

选择子表,右键,选择分区管理,弹出对话框分区管理,选择删除分区项,指定要删除的分区表,将删除该分区。

查看删除分区表DDL语句:
alter table"DMTEST"."SALES6"
drop partition"PART_3";
用户可在图形化界面点击确定删除分区,也可使用DDL语句删除分区。
执行删除分区后,如下图:

1.3、拆分分区
例如表SALES,查看属性,查看DDL
PART_1子表中为SALE_DATE列2001-01-01之前的数据;
PART_2子表中为2001-01-01至2010-01-01之间的数据;
PART_4子表中为2010-01-01至2030-01-01之间的数据;
PART_MAX子表中为2030-01-01的数据。
如果用户发现PART_4子表中数据太多,需要拆分单独的子表存放,此时可以拆分分区表

拆分分区:
查看SALES6_PART_4表中数据

选择子表,右键,选择分区管理,弹出对话框分区管理,选择拆分分区项,添加常量表达式,修改对应的分区表。
如下图,PART_4拆分为3个分区
PART_3分区表中为2015-01-01之前的数据
PART_3_1分区表中为2015-01-01之后的数据

查看拆分分区的DDL语句:
alter table"DMTEST"."SALES6"
split partition"PART_4" at('2015-01-01') into(
partition"PART_3" storage(initial1, next1, minextents1, fillfactor0),
partition"PART_3_1" storage(initial1, next1, minextents1, fillfactor0));
用户可在图形化界面点击确定拆分分区,也可使用DDL语句拆分分区。
执行拆分分区后,如下图:

可查看拆分分区后的数据,确认原分区表中的数据在拆分后的分区表中。
注意:拆分分区表前最好做好备份,以便检查数据是否有丢失。


1.4、合并分区
例如表SALES6,查看属性,查看DDL
PART_1子表中为SALE_DATE列2001-01-01之前的数据;
PART_2子表中为2001-01-01至2010-01-01之间的数据;
PART_3子表中为2010-01-01至2015-01-01之间的数据;
PART_3_1子表中为2015-01-01至2030-01-01之间的数据;
PART_MAX子表中为2030-01-01之后的数据。
如果用户发现子表中数据比较少,多个子表可合并,此时可以合并分区表

合并分区表:
(PART_3和PART_3_1子表中的数据见上文拆分分区表)
选择子表,右键,选择分区管理,弹出对话框分区管理,选择合并分区项,选择分区合并(或编号合并),指定新分区名,以及要合并的两个分区。
注意:新分区名不能与已有分区名重名,也不能与待合并分区重名。

查看合并分区的DDL语句:
alter table"DMTEST"."SALES6"
merge partitions"PART_3","PART_3_1" into partition"PART_3NEW";
用户可在图形化界面点击确定合并分区,也可使用DDL语句合并分区。
执行合并分区后,如下图。
查看新分区的数据,原分区的数据合并到了新分区

1.5、交换分区
交换分区可以将分区表与结构相同的普通表数据进行交换。
注意:交换分区时普通表中的数据需要人工检查,交换分区时不检查数据是否符合规则。
PART_3NEW子表中为2010-01-01至2030-01-01之间的数据;
查看分区表PART_3NEW中数据:

查看普通表SALES0表中数据

交换分区表:
选择子表,右键,选择分区管理,弹出对话框分区管理,选择交换分区项。

查看交换分区的DDL语句:
alter table"DMTEST"."SALES6"
exchange partition"PART_3NEW" with table"DMTEST"."SALES0";
用户可在图形化界面点击确定交换分区,也可使用DDL语句交换分区。
执行交换分区后,如下图。
查看分区数据和普通表中的数据
分区表中数据如下图,该数据并不符合分区表的分区规则,在交换分区的时候系统不会提示,所以执行交换分区时一定要检查普通表中的数据是否符合交换分区的规则。

普通表中数据:

2、列表分区
2.1、添加分区
如果列表分区中已经表达式是DEFAULT的分区,则不能添加分区。
例如表SALES7,查看属性,查看DDL
PART_1子表中为REGION列为北京、上海或武汉的数据;
PART_2子表中为REGION列为成都、南京或西安的数据;

如果用户需要添加REGION为其他地区的数据,此时会提示:没有找到合适的分区,此时用户应添加分区。

添加分区:
选择SALES7表的子表,右键,选择分区管理,弹出对话框分区管理,可添加分区

查看DDL
alter table"DMTEST"."SALES7"
add partition"PART_3" values('广州','石家庄') storage(initial1, next1, minextents1, fillfactor0);
alter table"DMTEST"."SALES7"
add partition"PART_4" values('哈尔滨') storage(initial1, next1, minextents1, fillfactor0);
用户可在图形化界面点击确定添加分区,也可使用DDL语句添加分区。
执行添加分区后,如下图。

2.2、删除分区
略。与范围分区中删除分区操作一致。
2.3、交换分区
略。与范围分区中交换分区操作一致。
3、组合分区
略。子分区为范围分区,则操作同范围分区;子分区为列表分区,则操作同列表分区。