当前位置: 首页 > news >正文

DM8 分区表学习笔记

一、分区表概述

表分区功能可以使某些查询及维护操作的性能大大提升,当表中的数据不断增多,查询效率越来越慢这时就可以考虑进行表分区,也叫分区表(Partition Table),在逻辑上还是一张表的数据,但在物理上分散存储到多个独立的分区中的数据库对象。每个分区拥有独立的存储空间、索引、数据块管理信息,但对用户来说仍表现为一张完整的表。

DM8(达梦数据库)支持多种分区方式✔

  • 范围分区(RANGE)
  • 列表分区(LIST)
  • 哈希分区(HASH)
  • 复合分区(LIST-RANGE、RANGE-LIST、HASH-RANGE 等九种组合)
  • 间隔分区(INTERVAL)
  • 虚拟列分区(VIRTUAL COLUMN PARTITION)

❌不支持系统分区参考分区,参考分区可以建但好像不能用,虽然创建成功了没有找到子表对应的分区,请看下面的创建示例。

通过对表进行分区提高了管理性和性能:将数据分散到各个分区中减少了数据块损坏的可能性,可单独对分区进行备份和恢复,查询时进行动态裁剪降低了IO。但同时也增加了维护的难度,主要在分区表和分区索引的维护。

二、分区表设计原则

  1. 表过大:当表大小超过 2GB 或 OLTP 系统中表记录超过 1000 万时。
  2. 历史数据隔离:数据按时间自然分区(如按月、按年)。
  3. 查询模式明显:如按日期范围、地区或固定维度查询。
  4. 访问集中于部分数据:仅访问表中少量活跃数据。
  5. 定期批量删除数据:如按月删除历史记录。
  6. 周期性备份需求:分区与表空间对应便于周期性备份。
  7. 只读数据优化:将只读数据分区到只读表空间中。
  8. 并行查询表:利于分区并行执行。
  9. 部分高可用数据需求:部分分区可以独立高可用或容灾。

三、DM8 分区表类型

分区类型

特点

RANGE(范围分区)

按数值或日期区间划分。eg:时间字段、数字

LIST(列表分区)

按离散值(城市、地区等)划分。

HASH(哈希分区)

通过哈希函数均匀分布数据。

INTERVAL(间隔分区)

根据“间隔”以一个区间分区表为“起点”自动创建新分区。

复合分区

LIST-RANGE、RANGE-LIST、HASH-RANGE 等多层结构。

虚拟列分区

通过表达式计算列值自动分区。

四、 水平分区表的主要限制

1. 分区列类型必须是数值型、字符型或日期型不支持 BLOB、CLOB、IMAGE、TEXT、LONGVARCHAR、BIT、BINARY、VARBINARY、LONGVARBINARY、时间间隔类型和用户自定义类型为分区列;

2. 范围分区哈希分区分区键可以多个,每一层最多不超过 16 列LIST 分区的分区键必须唯一;

3. 只有当分区键都包含在索引键中时,才能创建非全局唯一索引;

4. 水平分区表不支持临时表

5. 不能在水平分区表上建立自引用约束;

6. 普通环境中,水平分区表的各级分区数的总和上限是 65535MPP 环境下,水平分区表的各级分区总数上限取决于 INI 参数 MAX_EP_SITES,上限为 2^( 16 - log2MAX_EP_SITES)。比如:当 MAX_EP_SITES 为默认值 64 时,分区总数上限为 1024;

7. 不允许对分区子表执行任何 DDL 操作;

8. 哈希分区支持重命名、增加/删除约束、设置触发器是否启用的修改操作;

9. 范围分区支持分区合并、拆分、增加、删除、交换、重命名、增加/删除约束、设置触发器是否生效操作;

10. LIST 分区支持分区合并、拆分、增加、删除、交换、重命名、增加/删除约束、设置触发器是否生效操作;

11. LIST 分区子表范围值个数数据页大小和相关系统表列长度相关,存在以下限制:

1. 4K 页,单个子表最多支持 120 个范围值;

2. 8K 页,单个子表最多支持 254 个范围值;

3. 16K\32K 页,单个子表最多支持 270 个范围值;

12. 对范围分区增加分区值必须是递增的,即只能在最后一个分区后添加分区。LIST 分区增加分区值不能存在于其他已存在分区;

13. 当分区数仅剩一个时,不允许删除分区;

14. 仅能对相邻的范围分区进行合并,合并后的分区名可为高分区名或新分区名;

15. 拆分分区的分区值必须在原分区范围中,并且分区名不能跟已有分区名相同;

16. 与分区进行分区交换的普通表,必须与分区表拥有相同的列及索引,但交换分区并不会对数据进行校验,即交换后的数据并不能保证数据完整性,如 CHECK 约束;分区表与普通表创建的索引顺序要求一致;

17. 不能对水平分区表建立全局聚集索引或局部唯一函数索引;

18. 不能对分区子表单独建立索引;

19. 在未指定 ENABLE ROW MOVEMENT 的分区表上执行更新分区键,不允许更新后数据发生跨分区的移动,即不能有行迁移;

20. 不允许引用水平分区子表作为外键约束;

21. 多级分区表最多支持八层;

22. 多级分区表支持下列修改表操作:新增分区、新增列、删除列、删除表级约束、修改表名、设置与删除列的默认值、设置列 NULL 属性、设置列可见性、设置行迁移属性、启用超长记录、with delta、新增子分区、删除子分区、修改二级分区模板信息

23. 水平分区表支持的列修改操作除了多级分区表支持的操作外,还支持:设置触发器生效/失效、修改列名、修改列属性、增加表级主键约束、删除分区、SPLIT/MERGE 分区和交换分区;

24. 间隔分区表的限制说明:

1. 仅支持一级范围分区创建间隔分区;

2. 只能有一个分区列,且分区列类型为日期或数值;

3. 对间隔分区进行 SPLIT,只能在间隔范围内进行操作;

4. 被 SPLIT/MERGE 的分区,其左侧分区不再进行自动创建;

5. 不相邻的间隔的分区,不能 MERGE;

6. 表定义不能包含 MAXVALUE 分区

7. 不允许新增分区;

8. 不能删除起始间隔分区;

9. 间隔分区表定义语句显示到起始间隔分区为止;

10. 自动生成的间隔分区,均不包含边界值;

11. 间隔表达式只能为常量或日期间隔函数。日期间隔函数为:NUMTOYMINTERVAL、NUMTODSINTERVAL;数值常量可以为整型、DEC 类型;

12. MPP 下不支持间隔分区表

五、分区表创建示例

5.1. 范围分区

    CREATE  TABLE  callinfo( caller 	CHAR(15), callee 	CHAR(15),time		DATETIME,duration	INT)PARTITION BY RANGE(time)(PARTITION p1 VALUES LESS THAN ('2010-04-01'),PARTITION p2 VALUES LESS THAN ('2010-07-01'),PARTITION p3 VALUES LESS THAN ('2010-10-01'),PARTITION p4 VALUES EQU OR LESS THAN ('2011-01-01')  //'2010-01-01'也可替换为 MAXVALUE );insert into panda.callinfo values('张飞','刘备','2010-04-15',10); -- p2
insert into panda.callinfo values('刘备','关羽','2010-08-15',10); -- p3commit;select * from panda.CALLINFO partition(p1);
select * from panda.CALLINFO partition(p2); 
-- select * from panda.CALLINFO partition(p1_2);
select * from panda.CALLINFO partition(p3);-- 加分区 最大分区  pmax
alter table panda.CALLINFO add partition pmax VALUES less than (MAXVALUE);-- 拆分区 从pmax里面拆2011-04-01到p5
alter table panda.CALLINFO SPLIT partition pmax at('2011-04-01')into(partition p5 STORAGE(ON "DATA", CLUSTERBTR),partition pmax STORAGE(ON "DATA", CLUSTERBTR));-- 删除分区  p5
alter table panda.callinfo drop partition p5;-- 支持 split 分区数据会移动
insert into panda.callinfo values('刘备','关羽','2011-03-15',10);
select * from panda.CALLINFO partition(pmax); --pmax
select * from panda.CALLINFO partition(p5); --p5-- 合并分区ALTER TABLE callinfo MERGE PARTITIONS p1, p2 into partition p1_2;drop table panda.CALLINFO;
-- 查看表定义
select TABLEDEF('PANDA','CALLINFO');

5.2. 列表分区

    CREATE  TABLE  sales( sales_id	INT,saleman	CHAR(20),saledate	DATETIME,city		CHAR(10))PARTITION BY LIST(city)(PARTITION p1 VALUES ('北京', '天津'),PARTITION p2 VALUES ('上海', '南京', '杭州'),PARTITION p3 VALUES ('武汉', '长沙'),PARTITION p4 VALUES ('广州', '深圳'));
-- 修改分区值
ALTER TABLE panda.sales MODIFY PARTITION p1 DROP VALUES ('天津'); 
ALTER TABLE panda.sales MODIFY PARTITION p1 ADD VALUES ('天津','唐山');
-- 加分区
alter table panda.sales add partition p5 values ('台湾');
alter table panda.sales add partition pmax values (DEFAULT);-- 拆分区
alter table panda.sales split partition pmax values ('黑龙江','吉林','辽宁') into (partition p6,partition pmax)-- 删分区
alter table panda.sales drop partition pmax;-- 查看表定义
select TABLEDEF('PANDA','SALES');
select TABLEDEF('PANDA','SALES_HEAP');-- 堆表 list分区
CREATE TABLE "PANDA"."SALES_HEAP"
(
"SALES_ID" INT,
"SALEMAN" CHAR(20),
"SALEDATE" DATETIME(6),
"CITY" CHAR(10))
PARTITION BY LIST("CITY")
(
PARTITION  "P2"  VALUES('上海    ','南京    ','杭州    ')  ,
PARTITION  "P1"  VALUES('北京    ','唐山    ','天津    ')   ,
PARTITION  "P4"  VALUES('广州    ','深圳    ')  ,
PARTITION  "P3"  VALUES('武汉    ','长沙    ')   
) STORAGE(ON "DATA", NOBRANCH ) ;

5.3. 哈希分区

    CREATE  TABLE  sales01( sales_id	INT,saleman	CHAR(20),saledate	DATETIME,city		CHAR(10))PARTITION BY HASH(city)(PARTITION p1,PARTITION p2,PARTITION p3,PARTITION p4);-- 加分区
alter table panda.sales01 add partition p5;
alter table panda.sales01 add partition pmax ;-- 拆分区 ❌
-- alter table panda.sales01 split partition pmax into (partition p6,partition pmax)-- 删分区❌
-- alter table panda.sales01 drop partition pmax;-- 查看表定义
select TABLEDEF('PANDA','SALES01');insert into panda.sales01 values(1,'煎饼果子',sysdate,'天津'); -- pmax
insert into panda.sales01 values(2,'豆汁',sysdate,'北京'); -- p5
insert into panda.sales01 values(3,'炒鸡',sysdate,'山东'); -- p4
insert into panda.sales01 values(1,'棋子烧饼',sysdate,'唐山'); --p1
commit;
insert into panda.sales01 values(4,'汉堡',sysdate,'美国'); --p4
insert into panda.sales01 values(5,'棋子烧饼',sysdate,'上海'); --p4
insert into panda.sales01 values(6,'棋子烧饼',sysdate,'深圳'); --p1
insert into panda.sales01 values(7,'棋子烧饼',sysdate,'杭州'); --p2
insert into panda.sales01 values(8,'棋子烧饼',sysdate,'黑龙江'); --p3select * from panda.sales01 partition(p1);
select * from panda.sales01 partition(p2);
select * from panda.sales01 partition(p3);
select * from panda.sales01 partition(p4);
select * from panda.sales01 partition(p5);
select * from panda.sales01 partition(pmax);
select * from panda.sales01 partition(p6);-- 官方文档写的哈希分区不支持add分区,实际上是支持的,hash算法没变还是落到同样的分区
alter table panda.sales01 add partition p6;
insert into panda.sales01 values(100,'煎饼果子',sysdate,'天津'); -- pmax
insert into panda.sales01 values(200,'豆汁',sysdate,'北京'); -- p5
insert into panda.sales01 values(300,'炒鸡',sysdate,'山东'); -- p4
insert into panda.sales01 values(100,'棋子烧饼',sysdate,'唐山'); --p1
commit;
insert into panda.sales01 values(400,'汉堡',sysdate,'美国'); --p4
insert into panda.sales01 values(500,'棋子烧饼',sysdate,'上海'); --p4
insert into panda.sales01 values(600,'棋子烧饼',sysdate,'深圳'); --p1
insert into panda.sales01 values(700,'棋子烧饼',sysdate,'杭州'); --p2
insert into panda.sales01 values(800,'棋子烧饼',sysdate,'黑龙江'); --p3-- 再次插入p6分区并没有值,重新测试后续插入的分区不会影响插入策略
insert into panda.sales01 values(800,'棋子烧饼',sysdate,'吉林'); --p3
insert into panda.sales01 values(800,'棋子烧饼',sysdate,'辽宁'); --p3
insert into panda.sales01 values(800,'棋子烧饼',sysdate,'陕西'); --p3
insert into panda.sales01 values(800,'棋子烧饼',sysdate,'广东'); --p3-- drop table panda.sales01;

5.4. 复合分区

5.4.1 列表-范围分区

模板创建

   CREATE  TABLE  shop( SALES_ID	 INT,SALEMAN	CHAR(20),SALEDATE	DATETIME,CITY		  CHAR(10))PARTITION BY LIST(CITY)SUBPARTITION BY RANGE(SALEDATE) 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 EQU OR LESS THAN (MAXVALUE))(PARTITION P1 VALUES ('北京', '天津')(SUBPARTITION P11_1 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P11_2 VALUES EQU OR LESS THAN (MAXVALUE)),PARTITION P2 VALUES ('上海', '南京', '杭州'),PARTITION P3 VALUES (DEFAULT));-- 二级分区操作
-- 修改子分区模板,没有报错但是没有修改成功
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));-- 对已经存在的一级分区,子分区模板不会影响已存在的子分区。仅影响 后续新创建的一级分区,旧分区不会更新。 
alter table panda.shop drop partition P3;    
alter table panda.shop add partition p3 values('台湾'); 
alter table panda.shop add partition p4 values('广东');    
-- 但是在删掉default  maxvalue限制后在添加的两个分区p3,p4依旧沿用之前的模板   
dmdba@DAMENG:5236 SQL> @tabpart panda.shop
unknown COLUMN choosen headTABLE_OWNER TABLE_NAME POS         COMPOSITE PARTITION_NAME NUM_ROWS             SUBPARTITION_COUNT   TABPART_HIGH_VALUE         HIGH_VALUE_LENGTH COMPRESSION COMPRESS_FOR
----------- ---------- ----------- --------- -------------- -------------------- -------------------- -------------------------- ----------------- ----------- ------------
PANDA       SHOP       1           YES       P1             NULL                 2                    '??    ','??    '          17                NONE        NULL
PANDA       SHOP       2           YES       P2             NULL                 4                    '??    ','??    ','??    ' 26                NONE        NULL
PANDA       SHOP       3           YES       P3             NULL                 4                    '??    '                   8                 NONE        NULL
PANDA       SHOP       4           YES       P4             NULL                 4                    '??    '                   8                 NONE        NULL
used time: 3.908(ms). Execute id is 622565.
dmdba@DAMENG:5236 SQL> 
dmdba@DAMENG:5236 SQL> 
dmdba@DAMENG:5236 SQL> 
dmdba@DAMENG:5236 SQL> @tabsubpart panda.shop
unknown COLUMN choosen headTABLE_OWNER TABLE_NAME PARTITION_NAME SUBPARTITION_NAME SUB_POS     NUM_ROWS             TABPART_HIGH_VALUE            HIGH_VALUE_LENGTH
----------- ---------- -------------- ----------------- ----------- -------------------- ----------------------------- -----------------
PANDA       SHOP       P1             P11_1             1           NULL                 DATETIME'2012-10-01 00:00:00' 29
PANDA       SHOP       P1             P11_2             2           NULL                 MAXVALUE                      8
PANDA       SHOP       P2             P11               1           NULL                 DATETIME'2012-04-01 00:00:00' 29
PANDA       SHOP       P2             P12               2           NULL                 DATETIME'2012-07-01 00:00:00' 29
PANDA       SHOP       P2             P13               3           NULL                 DATETIME'2012-10-01 00:00:00' 29
PANDA       SHOP       P2             P14               4           NULL                 MAXVALUE                      8
PANDA       SHOP       P3             P11               1           NULL                 DATETIME'2012-04-01 00:00:00' 29
PANDA       SHOP       P3             P12               2           NULL                 DATETIME'2012-07-01 00:00:00' 29
PANDA       SHOP       P3             P13               3           NULL                 DATETIME'2012-10-01 00:00:00' 29
PANDA       SHOP       P3             P14               4           NULL                 MAXVALUE                      8
PANDA       SHOP       P4             P11               1           NULL                 DATETIME'2012-04-01 00:00:00' 29
PANDA       SHOP       P4             P12               2           NULL                 DATETIME'2012-07-01 00:00:00' 29
PANDA       SHOP       P4             P13               3           NULL                 DATETIME'2012-10-01 00:00:00' 29
PANDA       SHOP       P4             P14               4           NULL                 MAXVALUE                      8
used time: 5.190(ms). Execute id is 622566.-- 重命名二级分区
alter table panda.shop MODIFY PARTITION P1 rename SUBPARTITION P11_2 to P11_3; ❌    
-2007: 第 1 行, 第 43 列[rename]附近出现错误: 
语法分析出错  
alter table panda.shop rename SUBPARTITION P11_2 to P11_3;✔-- 拆二级分区
alter table panda.shop MODIFY PARTITION P1 split SUBPARTITION P11_2 at('2013-01-01') into(partition P11_3,partition P11_2);❌    
-2007: 第 1 行, 第 43 列[split]附近出现错误: 
语法分析出错
alter table panda.shop split SUBPARTITION P11_3 at('2012-11-01') into(partition P11_2,partition P11_3);  ❌ 
-2007: 第 1 行, 第 29 列[SUBPARTITION]附近出现错误: 
语法分析出错
-- 加二级分区
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 ;✔
ALTER TABLE panda.shop partition P1 drop SUBPARTITION P11_2 ;❌
ALTER TABLE panda.shop MODIFY PARTITION P1 drop SUBPARTITION P11_2 ;❌-- 查看表定义
select TABLEDEF('PANDA','SHOP');

非模板

    CREATE  TABLE  shop02( SALES_ID	 INT,SALEMAN	CHAR(20),SALEDATE	DATETIME,CITY		  CHAR(10))PARTITION BY LIST(CITY)SUBPARTITION BY RANGE(SALEDATE)(PARTITION P1 VALUES ('北京', '天津')(SUBPARTITION P1_201210 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P1_max VALUES EQU OR LESS THAN (MAXVALUE)),PARTITION P2 VALUES ('上海', '南京', '杭州')(SUBPARTITION P2_201210 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P2_max VALUES EQU OR LESS THAN (MAXVALUE)),        PARTITION P3 VALUES (DEFAULT)(SUBPARTITION P3_201210 VALUES LESS THAN ('2012-10-01'),SUBPARTITION P3_max VALUES EQU OR LESS THAN (MAXVALUE)));	insert into panda.shop values(1,'煎饼果子',2012-03-01,'天津'); 
insert into panda.shop values(2,'豆汁',2012-0-01,'北京');
insert into panda.shop values(3,'炒鸡',sysdate,'山东'); 
insert into panda.shop values(4,'汉堡',sysdate,'美国'); 
insert into panda.shop values(5,'棋子烧饼',sysdate,'唐山');select * from panda.shop partition(p1);
select * from panda.shop partition(p2);
select * from panda.shop partition(p3);
select * from panda.shop partition(p4);
select * from panda.shop partition(p5);
select * from panda.shop partition(pmax);
select * from panda.shop partition(p6);-- 修改分区值
ALTER TABLE panda.shop02 MODIFY PARTITION p1 DROP VALUES ('天津'); 
ALTER TABLE panda.shop02 MODIFY PARTITION p1 ADD VALUES ('天津','唐山');-- 加分区
alter table panda.shop02 add partition p4 values ('台湾');
alter table panda.shop02 add partition pmax values (DEFAULT);-- 拆分区
alter table panda.shop02 split partition p3 values ('黑龙江','吉林','辽宁') into (partition p3,partition p4)
alter table panda.shop02 split partition p4 values ('台湾') into (partition p4,partition pmax)--重命名分区
alter table panda.shop02 rename partition p3 to pmax;
alter table panda.shop02 rename partition pmax to p3;-- 截断分区
alter table panda.shop02 truncate PARTITION pmax;-- 删分区
alter table panda.shop02 drop partition pmax;-- 查看表定义
select TABLEDEF('PANDA','SHOP02');

5.4.2 范围-范围分区
create table stu_indo
(
id NUMBER(20) not null primary key,
name VARCHAR2(20) not null,
age NUMBER(10) not null,
sex VARCHAR2(10) not null,
tel VARCHAR2(12) not null,
email VARCHAR2(30) not null,
birthday DATE DEFAULT sysdate,
recommend VARCHAR2(10)
) 
partition by range(birthday)
subpartition by range(age)
subpartition template --(性别)可以用范围和列表
(
subpartition sub_p_30 values less than('30'),
subpartition sub_p_60 values less than('60'),
subpartition sub_p_other values less than(maxvalue)
)
(
partition p1990 values less than (to_date('2000-01-01','YYYY-MM-DD')),
partition p2000 values less than (to_date('2010-01-01','YYYY-MM-DD')),
partition p2010 values less than (to_date('2020-01-01','YYYY-MM-DD')),
partition p2020 values less than (to_date('2030-01-01','YYYY-MM-DD')) 
);-- STORAGE(HASHPARTMAP(1), ON "DATA", CLUSTERBTR) ;select TABLEDEF('PANDA','STU_INFO');
alter table stu_indo rename to STU_INFO;	INSERT INTO stu_info VALUES (1, 'Alice', 25, 'F', '13800000001', 'alice@test.com', DATE '1999-05-20', 'Y');
INSERT INTO stu_info VALUES (2, 'Bob', 45, 'M', '13800000002', 'bob@test.com', DATE '2005-08-10', 'N');
INSERT INTO stu_info VALUES (3, 'Carol', 65, 'F', '13800000003', 'carol@test.com', DATE '1985-12-01', 'Y');
COMMIT;select * from panda.STU_INFO partition(p1990);
select * from panda.STU_INFO partition(p2000);
select * from panda.STU_INFO partition(p2010);select * from panda.STU_INFO subpartition(sub_p_30); 
select * from panda.STU_INFO subpartition(sub_p_60); -- 没找到 Bob 信息,原来在子分区 p2000_sub_p_60里面
select * from panda.STU_INFO subpartition(sub_p_other);SELECT * FROM panda.stu_info SUBPARTITION (p2000_sub_p_60);select * from DBA_TABLES where table_name='STU_INFO';
select * from DBA_PART_TABLES where table_name='STU_INFO';select * from DBA_INDEXES where table_name='STU_INFO';
select * from dba_ind_partitions where INDEX_NAME='IND_CALLINFO_TIME';
-- dba_part_indexes❌select * from DBA_TAB_PARTITIONS where table_name='STU_INFO';
select * from DBA_TAB_SUBPARTITIONS where table_name='STU_INFO';dmdba@DAMENG:5236 SQL> 
dmdba@DAMENG:5236 SQL> @tab panda.stu_infoOWNER TABLE_NAME TYPE NUM_ROWS BLOCKS EMPTY AVGSPC ROWLEN LAST_ANALYZED DEGREE COMPRESSION
----- ---------- ---- -------- ------ ----- ------ ------ ------------- ------ -----------
PANDA STU_INFO   PIOT NULL     NULL   NULL  NULL   NULL   NULL          1      DISABLED
used time: 101.502(ms). Execute id is 622534.
dmdba@DAMENG:5236 SQL> @tabpart panda.stu_info
unknown COLUMN choosen headTABLE_OWNER TABLE_NAME POS         COMPOSITE PARTITION_NAME NUM_ROWS             SUBPARTITION_COUNT   TABPART_HIGH_VALUE HIGH_VALUE_LENGTH COMPRESSION COMPRESS_FOR
----------- ---------- ----------- --------- -------------- -------------------- -------------------- ------------------ ----------------- ----------- ------------
PANDA       STU_INFO   1           YES       P1990          NULL                 3                    DATE'2000-01-01'   16                NONE        NULL
PANDA       STU_INFO   2           YES       P2000          NULL                 3                    DATE'2010-01-01'   16                NONE        NULL
PANDA       STU_INFO   3           YES       P2010          NULL                 3                    DATE'2020-01-01'   16                NONE        NULL
PANDA       STU_INFO   4           YES       P2020          NULL                 3                    DATE'2030-01-01'   16                NONE        NULL
used time: 45.657(ms). Execute id is 622538.
dmdba@DAMENG:5236 SQL> 
dmdba@DAMENG:5236 SQL> @tabsubpart panda.stu_info
unknown COLUMN choosen headTABLE_OWNER TABLE_NAME PARTITION_NAME SUBPARTITION_NAME SUB_POS     NUM_ROWS             TABPART_HIGH_VALUE HIGH_VALUE_LENGTH
----------- ---------- -------------- ----------------- ----------- -------------------- ------------------ -----------------
PANDA       STU_INFO   P1990          SUB_P_30          1           NULL                 30                 2
PANDA       STU_INFO   P1990          SUB_P_60          2           NULL                 60                 2
PANDA       STU_INFO   P1990          SUB_P_OTHER       3           NULL                 MAXVALUE           8
PANDA       STU_INFO   P2000          SUB_P_30          1           NULL                 30                 2
PANDA       STU_INFO   P2000          SUB_P_60          2           NULL                 60                 2
PANDA       STU_INFO   P2000          SUB_P_OTHER       3           NULL                 MAXVALUE           8
PANDA       STU_INFO   P2010          SUB_P_30          1           NULL                 30                 2
PANDA       STU_INFO   P2010          SUB_P_60          2           NULL                 60                 2
PANDA       STU_INFO   P2010          SUB_P_OTHER       3           NULL                 MAXVALUE           8
PANDA       STU_INFO   P2020          SUB_P_30          1           NULL                 30                 2
PANDA       STU_INFO   P2020          SUB_P_60          2           NULL                 60                 2
PANDA       STU_INFO   P2020          SUB_P_OTHER       3           NULL                 MAXVALUE           8
used time: 63.593(ms). Execute id is 622539.

5.5. 间隔分区

create table stu_info02
(
id NUMBER(20) not null primary key,
name VARCHAR2(20) not null,
age NUMBER(10) not null,
sex VARCHAR2(10) not null,
tel VARCHAR2(12) not null,
email VARCHAR2(30) not null,
birthday DATE DEFAULT sysdate,
recommend VARCHAR2(10)
) 
partition by range(birthday)
interval (numtoyminterval(10,'year') )
(
partition PART_2000 values less than(to_date('2010-01-01','YYYY-MM-DD')), 
partition PART_2010 values less than (to_date('2020-01-01','YYYY-MM-DD')),
partition PART_2020 values less than (to_date('2030-01-01','YYYY-MM-DD'))
);
-- NUMTODSINTERVAL(2, 'HOUR')
-- NUMTODSINTERVAL(30, 'MINUTE')
-- interval (numtodsinterval(1,'day')	)
-- interval (numtoyminterval(1,'month') )
-- interval (numtoyminterval(1,'year') )SELECT SYSDATE,SYSDATE + NUMTOYMINTERVAL(1, 'YEAR') AS plus_1_year,SYSDATE + NUMTOYMINTERVAL(6, 'MONTH') AS plus_6_month,SYSDATE + NUMTODSINTERVAL(7, 'DAY') AS plus_7_day,SYSDATE + NUMTODSINTERVAL(2, 'HOUR') AS plus_2_hour,SYSDATE + NUMTODSINTERVAL(30, 'MINUTE') AS plus_30_min
FROM dual;select * from SYSHPARTTABLEINFO;-- 落入 PART_2000
INSERT INTO stu_info02 VALUES (1, 'Alice', 25, 'F', '13800000001', 'alice@test.com', DATE '2005-05-20', 'Y');-- 落入 PART_2010
INSERT INTO stu_info02 VALUES (2, 'Bob', 35, 'M', '13800000002', 'bob@test.com', DATE '2015-07-10', 'N');-- 落入 PART_2020
INSERT INTO stu_info02 VALUES (3, 'Carol', 28, 'F', '13800000003', 'carol@test.com', DATE '2022-03-18', 'Y');-- 自动创建新分区 SYS_P1267_1271
INSERT INTO stu_info02 VALUES (4, 'David', 30, 'M', '13800000004', 'david@test.com', DATE '2035-11-25', 'N');
INSERT INTO stu_info02 VALUES (5, 'nike', 30, 'M', '13800000004', 'nike@test.com', DATE '2043-01-05', 'N');-- 当对间隔分区表中的数据进行插入或更新操作时,若新的数据无法匹配现有的分区子表,则系统将自动以用户指定的现有分区的末尾临界值为起始值,以 < 间隔表达式 > 指定的值为间隔值创建一个可以匹配新数据的间隔分区COMMIT;
select * from panda.STU_INFO02 partition(PART_2000);
select * from panda.STU_INFO02 partition(PART_2010);
select * from panda.STU_INFO02 partition(PART_2020);
select * from panda.STU_INFO02 partition(SYS_P1267_1271);dmdba@DAMENG:5236 SQL> @tabpart panda.stu_info02
unknown COLUMN choosen headTABLE_OWNER TABLE_NAME POS         COMPOSITE PARTITION_NAME NUM_ROWS             SUBPARTITION_COUNT   TABPART_HIGH_VALUE HIGH_VALUE_LENGTH COMPRESSION COMPRESS_FOR
----------- ---------- ----------- --------- -------------- -------------------- -------------------- ------------------ ----------------- ----------- ------------
PANDA       STU_INFO02 1           NO        PART_2000      NULL                 0                    DATE'2010-01-01'   16                NONE        NULL
PANDA       STU_INFO02 2           NO        PART_2010      NULL                 0                    DATE'2020-01-01'   16                NONE        NULL
PANDA       STU_INFO02 3           NO        PART_2020      NULL                 0                    DATE'2030-01-01'   16                NONE        NULL
PANDA       STU_INFO02 4           NO        SYS_P1267_1271 NULL                 0                    DATE'2040-01-01'   16                NONE        NULL
PANDA       STU_INFO02 5           NO        SYS_P1267_1273 NULL                 0                    DATE'2050-01-01'   16                NONE        NULL
used time: 3.489(ms). Execute id is 622550.

5.6. 虚拟列分区

CREATE TABLE stu_info03
(id          NUMBER(20)      NOT NULL PRIMARY KEY,name        VARCHAR2(20)    NOT NULL,age         NUMBER(10)      NOT NULL,sex         VARCHAR2(10)    NOT NULL,cardid      NUMBER(30)      NOT NULL,birthday    DATE            NOT NULL,tel         VARCHAR2(12)    NOT NULL,email       VARCHAR2(30)    NOT NULL,recommend   VARCHAR2(10),  -- 虚拟列(自动计算月份数字 1-12)partition_month NUMBER(2) GENERATED ALWAYS AS (TO_NUMBER(TO_CHAR(birthday, 'MM')) ) VIRTUAL
)
PARTITION BY LIST (partition_month)
(PARTITION p_m1  VALUES (1),PARTITION p_m2  VALUES (2),PARTITION p_m3  VALUES (3),partition P_M5 values (5),partition P_M6 values (6),partition P_M7 values (7),partition P_M8 values (8), partition P_M9 values (9),partition P_M10 values (10),partition P_M11 values (11),partition P_M12 values (12)
);
-- 分区 P_M1(1月)
INSERT INTO stu_info03 (id, name, age, sex, cardid, birthday, tel, email, recommend)
VALUES (1, 'Alice', 25, 'F', 110101200001011234, DATE '2000-01-15', '13800000001', 'alice@test.com', 'Y');
-- 分区 P_M2(2月)
INSERT INTO stu_info03 (id, name, age, sex, cardid, birthday, tel, email, recommend)
VALUES (2, 'Bob', 30, 'M', 110101199002021234, DATE '1990-02-20', '13800000002', 'bob@test.com', 'N');
-- 分区 P_M3(3月)
INSERT INTO stu_info03 (id, name, age, sex, cardid, birthday, tel, email, recommend)
VALUES (3, 'Carol', 28, 'F', 110101199503031234, DATE '1995-03-10', '13800000003', 'carol@test.com', 'Y');COMMIT;select * from panda.STU_INFO03 partition(p_m1);
select * from panda.STU_INFO03 partition(p_m2);
select * from panda.STU_INFO03 partition(p_m3);

5.7.系统分区 ❌

-- 确定了分区列和分区方式,那么一条数据属于哪个分区也就被确定下来。而对于系统分区而言,分区是分区,数据是数据,二者没有对应的关系。数据可以被放在任意一个分区中,这不是由数据本身决定的,而是应用程序在插入时确定的。
CREATE TABLE stu_info04
(id          NUMBER(20)      NOT NULL PRIMARY KEY,name        VARCHAR2(20)    NOT NULL,age         NUMBER(10)      NOT NULL,sex         VARCHAR2(10)    NOT NULL,cardid      NUMBER(30)      NOT NULL,birthday    DATE            NOT NULL,tel         VARCHAR2(12)    NOT NULL,email       VARCHAR2(30)    NOT NULL,recommend   VARCHAR2(10)
)partition by system
(partition P1,partition P2,partition P3,partition P4);
line 12, column 16, nearby [system] has error[-2007]:Syntax error.
used time: 0.384(ms). Execute id is 0.

5.8.参考分区❌

-- 参考分区功能,对于主子表关系,如果对主表进行了分区,那么可以在子表上根据外键约束来建立对应主表的分区。
-- 这样主表和子表采用相同的等同分区方式,不但连接的时候可以利用PARTITION-WISE JOIN,而且对于主子表的分区操作也会十分方便。而且,这种方式并不需要在子表中存在主表的分区列。
CREATE TABLE orders ( order_id NUMBER(12),
order_date TIMESTAMP,
order_mode VARCHAR2(8),
customer_id NUMBER(6),
order_status NUMBER(2),
order_total NUMBER(8,2),
sales_rep_id NUMBER(6),
promotion_id NUMBER(6),
CONSTRAINT orders_pk PRIMARY KEY(order_id)
)
PARTITION BY RANGE(order_date)
(
partition p2014 values less than (to_date('2015-01-01','YYYY-MM-DD')), 
partition p2015 values less than (to_date('2016-01-01','YYYY-MM-DD')), 
partition p2016 values less than (to_date('2017-01-01','YYYY-MM-DD')), 
partition p2017 values less than (to_date('2018-01-01','YYYY-MM-DD'))
);CREATE TABLE order_items
( order_id NUMBER(12) NOT NULL,
line_item_id NUMBER(3) NOT NULL, 
product_id NUMBER(6) NOT NULL, 
unit_price NUMBER(8,2),
quantity NUMBER(8),
CONSTRAINT order_items_fk
FOREIGN KEY(order_id) REFERENCES orders(order_id) )
PARTITION BY REFERENCE(order_items_fk);select * from dba_tab_partitions where table_name='ORDERS';
select * from dba_tab_partitions where table_name='ORDER_ITEMS';select * from dba_tables  where table_name='ORDER_ITEMS';
-- DM虽然 创建没报错,但是子表没有分区
-- Oracle下
PANDA@orcl> @tab panda.%
Show tables matching condition "%panda.%%" (if schema is not specified then current user's tables only are shown)... 'OWNER                TABLE_NAME                     TYPE     NUM_ROWS        BLOCKS     EMPTY AVGSPC ROWLEN TAB_LAST_ANALYZED   DEGREE                                   COMPRESS
-------------------- ------------------------------ ---- ------------ ------------- --------- ------ ------ ------------------- ---------------------------------------- --------
PANDA                ORDERS                         PTAB                                                                                 1
PANDA                ORDER_ITEMS                    PTAB                                                                                 1PANDA@orcl> 
PANDA@orcl> @tabpart panda.%TABLE_OWNER                    TABLE_NAME                            POS COM PARTITION_NAME                   NUM_ROWS SUBPARTITION_COUNT HIGH_VALUE_RAW                                                                                       HIGH_VALUE_LENGTH COMPRESS COMPRESS_FOR
------------------------------ ------------------------------ ---------- --- ------------------------------ ---------- ------------------ ---------------------------------------------------------------------------------------------------- ----------------- -------- ------------
PANDA                          ORDERS                                  1 NO  P2014                                                      0 TIMESTAMP' 2015-01-01 00:00:00'                                                                                     31 DISABLED
PANDA                          ORDERS                                  2 NO  P2015                                                      0 TIMESTAMP' 2016-01-01 00:00:00'                                                                                     31 DISABLED
PANDA                          ORDERS                                  3 NO  P2016                                                      0 TIMESTAMP' 2017-01-01 00:00:00'                                                                                     31 DISABLED
PANDA                          ORDERS                                  4 NO  P2017                                                      0 TIMESTAMP' 2018-01-01 00:00:00'                                                                                     31 DISABLED
PANDA                          ORDER_ITEMS                             1 NO  P2014                                                      0                                                                                                                      0 DISABLED
PANDA                          ORDER_ITEMS                             2 NO  P2015                                                      0                                                                                                                      0 DISABLED
PANDA                          ORDER_ITEMS                             3 NO  P2016                                                      0                                                                                                                      0 DISABLED
PANDA                          ORDER_ITEMS                             4 NO  P2017                                                      0                                                                                                                      0 DISABLED8 rows selected.PANDA@orcl> 
PANDA@orcl> @tabsubpart panda.%no rows selectedPANDA@orcl> @partkeys panda.%PARTK OWNER                          NAME                           COLUMN_NAME                    COLUMN_POSITION
----- ------------------------------ ------------------------------ ------------------------------ ---------------
TABLE PANDA                          ORDERS                         ORDER_DATE                                   1
TABLE PANDA                          ORDER_ITEMS                    ORDER_ID                                     1PANDA@orcl> @ind panda.%
Display indexes where table or index name matches %panda.%%...TABLE_OWNER          TABLE_NAME                     INDEX_NAME                     POS# COLUMN_NAME                    DSC
-------------------- ------------------------------ ------------------------------ ---- ------------------------------ ----
PANDA                ORDERS                         ORDERS_PK                         1 ORDER_IDINDEX_OWNER          TABLE_NAME                     INDEX_NAME                     IDXTYPE    UNIQ STATUS   PART TEMP  H     LFBLKS           NDK   NUM_ROWS       CLUF LAST_ANALYZED       DEGREE VISIBILIT
-------------------- ------------------------------ ------------------------------ ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
PANDA                ORDERS                         ORDERS_PK                      NORMAL     YES  VALID    NO   N                                                                          1      VISIBLE
PANDA@orcl> 
PANDA@orcl> 
PANDA@orcl> @ddl panda.ORDERS_PKPL/SQL procedure successfully completed.DBMS_METADATA.GET_DDL(OBJECT_TYPE,OBJECT_NAME,OWNER)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------CREATE UNIQUE INDEX "PANDA"."ORDERS_PK" ON "PANDA"."ORDERS" ("ORDER_ID")PCTFREE 10 INITRANS 2 MAXTRANS 255STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)TABLESPACE "USERS" ;1 row selected.

六、分区表管理操作

创建水平分区表后,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 语句将分区数据跟普通表数据进行交换,交换的两张表需要具有相同的结构。仅范围分区和 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';
http://www.dtcms.com/a/542064.html

相关文章:

  • 做网站有没有免费空间英文网站建设注意什么
  • 3.枚举算法(一)
  • 网站开发需求收集网站建设和维护工作内容
  • 建设银行昆山分行网站wordpress本站导航在哪里
  • 房地产网站建设策划书如何对网站进行维护
  • Lambert W 函数简要探讨
  • 为什么要避免使用 `SELECT *`?
  • 网站怎么做外链接中国建设银行e路护航网银安全组件
  • 网页设计网站名字做网站开发数据库怎么写
  • 创建es索引
  • Spring Boot项目中如何实现接口幂等
  • 深圳高端网站开发网上卖产品怎么推广
  • hexo框架做网站wordpress 变换模板
  • 国美在线网站建设淄博做网站推广
  • 网站提交网址网店美工实训报告总结2000字
  • 建设一个电子文学网站资金多少东莞建网站平台
  • 中山网站建设设计二级域名网站
  • 做营销型网站的公司建设工程规范发布网站
  • 网站策划是做什么的网站制作400哪家好
  • app网站开发培训自己的免费网站空间
  • 中国建设银行官方网站企业上海 政务网站建设情况
  • sqlmap注入
  • 自己的电脑怎么做网站装饰装修材料
  • Rust性能炼金术:如何用零成本抽象锻造系统级利器
  • 门户网站举例项目营销推广计划
  • EKF融合IMU的Cartographer SLAM建图
  • 当网络里混入“假网关”:用 Scapy 写一个 DHCP 欺骗检测器(附完整代码与讲解)
  • 网站开发设计费 怎么入账建设网站的知识
  • Windows:解决电脑开机解锁后黑屏但鼠标可见可移动的问题
  • 网站根目录验证文件域名注册免费平台