目 录
1 水平分区... 1
1.1 范围分区... 1
1.1.1 按数字分区... 1
1.1.2 按日期分区... 5
1.2 列表分区... 6
1.3 哈希分区... 7
1.4 间隔分区... 7
1 水平分区
1.1 范围分区
分区列是数字或者日期类型。
1.1.1 按数字分区
1)创建分区表
| SQL> create table TEST.TAB_P1( id int, name varchar(20), birthday date, birthplace varchar(30) ) partition by range(id) ( partition pr1 values less than(5), partition pr2 values less than(10) ); 警告: 范围分区未包含MAXVALUE,可能无法定位到分区 操作已执行 已用时间: 14.897(毫秒). 执行号:52706. SQL> |
2)插入数据
使用for循环插入30条数据:
| SQL> begin for i in 1..30 loop insert into TEST.TAB_P1(id,name) values(i,'NAME'||i); commit; end loop; end; / [-2731]:没有找到合适的分区. 已用时间: 7.163(毫秒). 执行号:0. |
查询表的行数:
| SQL> select count(*) from TEST.TAB_P1;
行号 COUNT(*) ---------- -------------------- 1 9
已用时间: 0.994(毫秒). 执行号:52708. SQL> |
结果可知插入了9行数据,剩下的数据因未定义分区未能插入进去。
3)增加分区
增加分区pr3:
| alter table TEST.TAB_P1 add partition pr3 values less than(maxvalue); |
插入10到30的数据:
| SQL> begin for i in 10..30 loop insert into TEST.TAB_P1(id,name) values(i,'NAME'||i); commit; end loop; end; / SQL> select count(*) from TEST.TAB_P1;
行号 COUNT(*) ---------- -------------------- 1 30
已用时间: 0.440(毫秒). 执行号:52712. SQL>
|
4)拆分分区
添加ID小于15的分区,将分区pr3拆分为分区pr4和pr5:
| Alter table TEST.TAB_P1 split partition pr3 at(15) into (partition pr4,partition pr5); |
查看表定义:
| SQL> sp_tabledef('TEST','TAB_P1');
行号 COLUMN_VALUE ---------- -------------------------------------------------------------------------- 1 CREATE TABLE "TEST"."TAB_P1" ( "ID" INT, "NAME" VARCHAR(20), "BIRTHDAY" DATE, "BIRTHPLACE" VARCHAR(30)) PARTITION BY RANGE("ID") ( PARTITION "PR1" VALUES LESS THAN(5) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PR2" VALUES LESS THAN(10) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PR4" VALUES LESS THAN(15) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PR5" VALUES LESS THAN(MAXVALUE) STORAGE(ON "MAIN", CLUSTERBTR) ) STORAGE(ON "MAIN", CLUSTERBTR) ;
已用时间: 0.648(毫秒). 执行号:52811. SQL>
|
更改分区名:

| SQL> alter table TEST.TAB_P1 rename partition PR4 to PR3; SQL> alter table TEST.TAB_P1 rename partition PR5 to PR4;
SQL> sp_tabledef('TEST','TAB_P1');
行号 COLUMN_VALUE ---------- -------------------------------------------------------------------------- 1 CREATE TABLE "TEST"."TAB_P1" ( "ID" INT, "NAME" VARCHAR(20), "BIRTHDAY" DATE, "BIRTHPLACE" VARCHAR(30)) PARTITION BY RANGE("ID") ( PARTITION "PR1" VALUES LESS THAN(5) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PR2" VALUES LESS THAN(10) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PR3" VALUES LESS THAN(15) STORAGE(ON "MAIN", CLUSTERBTR) , PARTITION "PR4" VALUES LESS THAN(MAXVALUE) STORAGE(ON "MAIN", CLUSTERBTR) ) STORAGE(ON "MAIN", CLUSTERBTR) ;
已用时间: 0.655(毫秒). 执行号:52814. SQL> |
5)合并分区
将分区pr3和pr4合并:
| SQL> alter table TEST.TAB_P1 merge partitions pr3,pr4 into partition pr5; |
修改分区名:
| SQL> alter table TEST.TAB_P1 rename partition PR5 to PR3; |
6)删除分区
删除分区pr3:
| SQL> alter table TEST.TAB_P1 drop partition PR3; SQL> select count(*) from TEST.TAB_P1;
行号 COUNT(*) ---------- -------------------- 1 9 已用时间: 0.834(毫秒). 执行号:52819. SQL> |
删除分区并删除了分区中的数据。
1.1.2 按日期分区
| SQL> create table TEST.TAB_P2( id int, name varchar(20), birthday date, birthplace varchar(30) ) partition by range(birthday) ( partition pr1 values less than(to_date('2019-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')), partition pr2 values less than(to_date('2020-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')), partition pr3 values less than(maxvalue) );
|
1.2 列表分区
分区列适合是字符串类型
| SQL> create table TEST.TAB_P2( id int, name varchar(20), birthday date, birthplace varchar(30) ) partition by list(id) ( partition pl1 values (‘黑龙江’,’吉林’,’辽宁’), partition pl2 values (‘北京’,’天津’,’河北’,’山西’,’内蒙古’), partition pl3 values (‘陕西’,’甘肃’,’新疆’,’青海’,’宁夏’), partition pl3 values (default) );
|
1.3 哈希分区
默认分区表名使用 DMHASHPART+分区号(从 0 开始)。
| SQL> create table TEST.TAB_P3( id int, name varchar(20), birthday date, birthplace varchar(30) ) partition by hash(id) partitions 10;
|
1.4 间隔分区
| SQL> create table TEST.TAB_P4( id int, name varchar(20), birthday date, birthplace varchar(30) ) partition by range(birthday) interval(numtoyminterval(1,’YEAR’)) ( partition pi1 values less than(to_date(‘2020-01-01 00:00:00’,’YYYY-MM-DD HH24:MI:SS')), partition pi2 values less than(to_date(‘2020-01-01 00:00:00’,’YYYY-MM-DD HH24:MI:SS')), partition pi2 values less than(maxvalue) );
|
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17761.html