注册
DM8 分区表学习笔记2
专栏/技术分享/ 文章详情 /

DM8 分区表学习笔记2

codePanda 2025/10/31 350 0 0
摘要

六、分区表管理操作

创建水平分区表后,DM8 提供了对分区表的修改,功能包括:

1、增加分区:建立水平分区表后,可根据实际需要新增一个分区;

2、删除分区:建立水平分区表后,可根据实际需要删除一个分区;

3、合并分区:将相邻的两个范围分区合并为一个分区。合并分区通过指定两个分区名进行,将相邻的两个分区的数据进行合并,构建新的大分区。只能在范围和 LIST 分区上进行合并分区;

4、拆分分区:将某一个范围分区拆分为相邻的两个分区。拆分分区时指定的常量表达式值必须是原范围分区的有效范围值。只能在范围分区和 LIST 上进行拆分分区;

5、交换分区:将分区数据跟普通表数据进行交换,交换的两张表需要具有相同的结构。仅范围分区和 LIST 分区支持交换分区。不支持含有加密列的分区表交换分区。

6.1 加分区

-- 列表 alter table panda.sales add partition p5 values ('台湾'); -- 范围 ALTER TABLE table_name ADD PARTITION partition_name VALUES LESS THAN (value) STORAGE (ON data); ALTER TABLE table_name ADD PARTITION partition_name VALUES EQU OR LESS THAN (value) STORAGE (ON data); ALTER TABLE table_name ADD PARTITION partition_name VALUES LESS THAN (MAXVALUE) STORAGE (ON data);

只能对范围分区和 LIST 分区增加分区,不能对哈希分区增加分区。(测试hash也是支持加分区的请看)

索引影响:无影响,分区索引只是局部索引,新增分区仅是新增分区子表,并更新分区主表的分区信息,其他分区并不发生改变。

6.2 删分区

ALTER TABLE table_name DROP PARTITION ptname; ALTER TABLE table_name DROP SUBPARTITION ptname;

只能对范围分区和 LIST 分区进行删除分区,哈希分区不支持删除分区

索引影响:无影响.

6.3 拆分区

ALTER TABLE table_name SPLIT PARTITION partition_name AT (value) INTO (PARTITION new_partition1 , PARTITION new_partition2); ALTER TABLE table_name SPLIT PARTITION partition_name AT (value) INTO (PARTITION new_partition1 STORAGE (ON data), PARTITION new_partition2 STORAGE (ON data));

仅范围分区表和 LIST 分区表支持拆分分区

索引影响:会失效,拆分分区会导致数据的重组和分区索引的重建

多级分区表进行拆分 SPLIT 注意事项:

1、仅支持一级子表类型为 RANGE、LIST;

2、支持 SPLIT 为 2 个或多个子表;

3、不允许自定义二级及以上层次子表;

4、SPLIT 产生的新分区二级及以上层次子表结构与被分隔子表保持一致,名称由系统内部定义。

6.4 合并分区

ALTER TABLE table_name MERGE PARTITIONS partition_name1, partition_name2 INTO PARTITION new_partition_name;

仅范围分区表和 LIST 分区表支持合并分区。其中,合并的 RANGE 分区必须是范围相邻的两分区。

索引影响:会失效,合并分区会导致数据的重组和分区索引的重建

多级分区表进行 MERGE 合并的注意事项:

1、仅支持一级子表类型为 RANGE、LIST;

2、合并多级分区表中的一级子表时,该一级子表下的二级及以上层次子表按照级别分别判断:在创建分区表时当前层次是否指定了模板,若指定了模板,则按照模板创建当前层次子表;若未指定模板,则由系统自动合并为一个子表,子表名称为系统内部设置。RANGE 类型范围值为 MAXVALUE;LIST 类型范围值为 DEFAULT;

3、不允许自定义二级及以上层次子表;

4、不允许直接合并二级及以上层次子表。

6.5 交换分区

DM 支持用 ALTER TABLE EXCHANGE PARTITION 语句将分区数据跟普通表数据进行交换,**<font style=“color:#DF2A3F;”>交换的两张表需要具有相同的结构。</font>**仅范围分区和 LIST 分区支持交换分区。进行交换的两张表,如果包含加密列,对应的加密列要求加密信息完全一致。

ALTER TABLE table_name EXCHANGE PARTITION partition_name WITH TABLE table_name2 [INCLUDING INDEXES]; ALTER TABLE table_name EXCHANGE SUBPARTITION subpartition_name WITH TABLE table_name2 [INCLUDING INDEXES]; CREATE TABLE callinfo_2011Q2( caller CHAR(15), callee CHAR(15), time DATETIME, duration INT ); -- 交换分区 ALTER TABLE callinfo EXCHANGE PARTITION p2 WITH TABLE callinfo_2011Q2; -- 删除原分区 ALTER TABLE callinfo DROP PARTITION p2; -- 新增分区,记录2011年第二季度通话记录 ALTER TABLE callinfo ADD PARTITION p6 VALUES LESS THAN ('2011-7-1') STORAGE (ON ts2);

通过交换分区实现分区 p2 和新建表 callinfo_2011Q2 的数据交换,表 callinfo_2011Q2 将得到 2010 年第二季度的通话记录,而分区 p2 数据将被清空。交换分区采用数据字典信息交换的技术,几乎不涉及 IO 操作,因此效率非常高。

6.6 二级分区管理

二级分区操作,使用列表-范围模板分区测试的仅供参考

-- 修改子分区模板,没有报错但是没有修改成功 alter table panda.shop set subpartition template ( --使用模板 SUBPARTITION P11 VALUES LESS THAN ('2012-04-01'), SUBPARTITION P12 VALUES LESS THAN ('2012-07-01'), SUBPARTITION P13 VALUES LESS THAN ('2012-10-01'), SUBPARTITION P14 VALUES LESS THAN ('2013-01-01'), SUBPARTITION P15 VALUES EQU OR LESS THAN (MAXVALUE)); -- 正常对已经存在的一级分区,子分区模板不会影响已存在的子分区。仅影响 后续新创建的一级分区,旧分区不会更新。 -- 但是在删掉default maxvalue限制后在添加的两个分区p3,p4依旧沿用之前的模板 -- 重命名二级分区 alter table panda.shop rename SUBPARTITION P11_2 to P11_3; -- 加二级分区 ALTER TABLE panda.shop MODIFY PARTITION P1 ADD SUBPARTITION P11_2 VALUES LESS THAN ('2013-01-01'); -- 截断二级分区 ALTER TABLE panda.shop truncate SUBPARTITION P11_2 ; -- 删除二级分区 ALTER TABLE panda.shop drop SUBPARTITION P11_2 ; -- 拆二级分区 不支持 -- 查看表定义 select TABLEDEF('PANDA','SHOP');

6.7 分区表管理汇总

-- 增加分区✔ alter table panda.CALLINFO add partition pmax VALUES less than (MAXVALUE); -- 拆分分区✔ alter table panda.CALLINFO SPLIT partition pmax at('2011-04-01')into(partition p5 STORAGE(ON "DATA", CLUSTERBTR),partition pmax STORAGE(ON "DATA", CLUSTERBTR)); -- 删除分区✔ alter table panda.callinfo drop partition p5; -- 收缩分区❌ ALTER TABLE panda.callinfo COALESCE PARTITION; -- 合并分区✔ ALTER TABLE callinfo MERGE PARTITIONS p1, p2 into partition p1_2; -- p2022_2023 -- 修改分区值(仅一级[LIST]分区子表支持此操作)✔ ALTER TABLE panda.sales MODIFY PARTITION p1 DROP VALUES ('天津'); ALTER TABLE panda.sales MODIFY PARTITION p1 ADD VALUES ('天津','唐山'); -- 截断分区✔ ALTER TABLE panda.callinfo TRUNCATE PARTITION p1_2 DROP STORAGE; -- 移动分区❌ ALTER TABLE panda.callinfo MOVE PARTITION p1_2 STORAGE(ON "DATA", CLUSTERBTR); ALTER TABLE panda.sales MOVE PARTITION p1 STORAGE(ON "DATA", CLUSTERBTR); --list分区 ALTER TABLE panda.SALES_HEAP MOVE PARTITION P3; --list分区堆表 -- 重命名分区✔ ALTER TABLE panda.callinfo RENAME PARTITION p1_2 TO p0; ALTER TABLE panda.callinfo RENAME PARTITION p0 TO p1_2; -- 修改默认属性❌ ALTER TABLE panda.callinfo MODIFY DEFAULT ATTRIBUTES STORAGE(ON "DATA", CLUSTERBTR); ALTER TABLE panda.sales MODIFY DEFAULT ATTRIBUTES STORAGE(ON "DATA", CLUSTERBTR); -- list分区 ALTER TABLE panda.SALES_HEAP MODIFY DEFAULT ATTRIBUTES PARTITION STORAGE(ON "DATA", NOBRANCH); -- list分区堆表 -- 修改当前属性❌ ALTER TABLE panda.callinfo MODIFY PARTITION p1_2 STORAGE (FILLFACTOR 80); ALTER TABLE panda.callinfo MODIFY PARTITION p1_2 FILLFACTOR 80; -- INITIAL 50, -- NEXT 50, -- MINEXTENTS 10, -- FILLFACTOR 80, -- ON USERS); -- 修改子分区模板 ALTER TABLE panda.callinfo SET SUBPARTITION TEMPLATE (SUBPARTITION sub_p1 VALUES('A'), SUBPARTITION sub_p2 VALUES('B')); -- 交换分区✔ ALTER TABLE panda.callinfo EXCHANGE PARTITION p2022_2023 WITH TABLE sales_temp INCLUDING INDEXES;

七、分区表信息查询视图

同Oracle的视图大部分能用,只有dba_part_indexes不兼容。

视图名 说明
DBA_TABLES 基本表信息
DBA_PART_TABLES 分区表信息
DBA_TAB_PARTITIONS 一级表分区信息
DBA_TAB_SUBPARTITIONS 二级表分区信息
DBA_INDEXES 索引信息
DBA_IND_PARTITIONS 索引分区信息

示例:

select * from DBA_TABLES where table_name='SALES01'; select * from DBA_PART_TABLES where table_name='SALES01'; select * from DBA_INDEXES where table_name='SALES01'; select * from dba_ind_partitions where INDEX_NAME='IND_CALLINFO_TIME'; -- dba_part_indexes❌ select * from DBA_TAB_PARTITIONS where table_name='SALES01'; select * from DBA_TAB_SUBPARTITIONS where table_name='SALES01';
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服