千家信息网

Oracle分区表 Partition Table的创建及管理是怎么样的

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Oracle分区表 Partition Table的创建及管理是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、创建分区表分区
千家信息网最后更新 2026年10月31日Oracle分区表 Partition Table的创建及管理是怎么样的

Oracle分区表 Partition Table的创建及管理是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、创建分区表
分区表分为四类:1、范围分区表 2、列表分区表 3、哈希分区表 4、组合分区表

下面分别创建四类分区表。
1、范围分区表

CREATE TABLE range_example(
range_key_column DATE,
DATA VARCHAR2(20),
ID integer
) PARTITION BY RANGE(range_key_column)
(
PARTITION part01 VALUES LESS THAN (TO_DATE('2008-07-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs01,
PARTITION part02 VALUES LESS THAN (TO_DATE('2008-08-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs02,
PARTITION part03 VALUES LESS THAN (TO_DATE('2008-09-1 00:00:00','yyyy-mm-dd hh34:mi:ss')) TABLESPACE tbs03
);

2、列表分区表

CREATE TABLE list_example(
dname VARCHAR2(10),
DATA VARCHAR2(20)
)PARTITION BY LIST(dname)
(
PARTITION part01 VALUES('ME','PE','QC','RD'),
PARTITION part02 VALUES('SMT','SALE')
);

3、哈希分区表

CREATE TABLE hash_example(
hash_key_column DATE,
DATA VARCHAR2(20)
) PARTITION BY HASH(hash_key_cloumn)
(
PARTITION part01 ,
PARTITION part02
);

4、组合分区表

CREATE TABLE range_hash_example(
range_column_key DATE,
hash_column_key INT,
DATA VARCHAR2(20)
)
PARTITION BY RANGE(range_column_key)
SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2
(
PARTITION part_1 VALUES LESS THAN (TO_DATE('2008-08-01','yyyy-mm-dd'))(
SUBPARTITION part_1_sub_1,
SUBPARTITION part_1_sub_2,
SUBPARTITION part_1_sub_3
),
PARTITION part_2 VALUES LESS THAN (TO_DATE('2008-09-01','yyyy-mm-dd'))(
SUBPARTITION part_2_sub_1,
SUBPARTITION part_2_sub_2
)
);


--注 subpartitions 2 并不是指定subpartition的个数一定为2,实际上每个分区的子分区个数可以不同。subpartitions 关键字的作用到底是什么?如果不指定subpartition的具体明细,则系统按照subpartitions的值指定subpartition的个数生成子分区,名称由系统定义 。

二、增加分区

-- range partitioned table
ALTER TABLE range_example ADD PARTITION part04 VALUES LESS THAN (TO_DATE('2008-10-1 00:00:00','yyyy-mm-dd hh34:mi:ss'));

--list partitioned table
ALTER TABLE list_example ADD PARTITION part04 VALUES ('TE');

--Adding Values for a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 ADD VALUES('MIS');

--Dropping Values from a List Partition
ALTER TABLE list_example MODIFY PARTITION part04 DROP VALUES('MIS');

--hash partitioned table
ALTER TABLE hash_example ADD PARTITION part03;

--增加subpartition
ALTER TABLE range_hash_exampleMODIFYPARTITION
part_1 ADD SUBPARTITION part_1_sub_4;

注:hash partitioned table 新增partition时,现有表的中所有data都有重新计算hash值,然后重新分配到分区中。所以被重新分配的分区的 indexes需要rebuild 。

三、删除分区
You can drop partitions from range, list, or composite range-list partitioned tables.

ALTER TABLE ... DROP PARTITION part_name;

For hash-partitioned tables, or hash subpartitions of range-hash partitioned tables, you must perform. a coalesce operation instead.

-- 减少hash 分区的个数,一次减少一个。不能指定减少partition的名称。
ALTER TABLE hash_example COALESCE PARTITION ;
--subpartition 的语法对于如下
ALTER TABLE divingMODIFYPARTITION us_locations
COALESCE SUBPARTITION;

四、 分区合并
1. 合并父分区

ALTER TABLE range_example
MERGE PARTITIONS part01_1,part01_2 INTO PARTITION part01
UPDATE INDEXES;


如果省略update indexes子句的话,必须重建受影响的分区的index 。 ALTER TABLE range_example MODIFY PARTITION part02 REBUILD UNUSABLE LOCAL INDEXES;

2. 合并子分区

ALTER TABLE composite_example
MERGE SUBPARTITIONS part_1_sub_2,part_1_sub_3 INTO SUBPARTITION part_1_sub_2
UPDATE INDEXES;

五、分割分区 hash partitions or subpartitions不能分割。如果指定的分割分区包含任何的数据时,对应的indexes可以被标识为UNUSABLE 。如果是一般的Heap Table,新的分区indexes为UNUSABLE ,所有gloabl indexes被标识为UNUSABLE 。如果是Index-organized table 新分区的indexes 为UNUSABLE,global indexes 仍然为USABLE。
1、range类型分区的分割

ALTER TABLE range_example
SPLIT PARTITION part01
AT (TO_DATE('2008-06-01 00:00:00','yyyy-mm-dd hh34:mi:ss'))
INTO ( PARTITION part01_1,PARTITION part01_2
);


一个分区一次性只能分割成两个分区,at关键字后面指定的值为第一个分区的range范围,默认为less than 。

2、list类型分区的分割

ALTER TABLE list_example
SPLIT PARTITION part01 VALUES('ME','PE')
INTO ( PARTITION part01_1, PARTITION part01_2
);

3、Range_Hash类型分区的分割 新分区会对原有分区的subpartition做rehash的动作。如果在分割是指定subpartition的个数,则按新规则rehash subpartition,如果没有指定则保留原有subpartition的个数不变。

ALTER TABLE range_hash_example SPLIT PARTITION part_1
AT (TO_DATE('2008-07-01 00:00:00','yyyy-mm-dd hh34:mi:ss')) INTO (
PARTITION part_1_1 SUBPARTITIONS 2 STORE IN (tbs01,tbs02),
PARTITION part_1_2
);

subpartitions 2 -- 指定新分区的subpartition的个数,store in 子句指定subpartition存储的tablespace 。

六、Exchanging Partitions

可以将分区表转换成非分区表,或者几种不同分区表之间的转换。
如下:

CREATE TABLE hash_part02 AS SELECT * FROM hash_example WHERE 1=2;
ALTER TABLE hash_example EXCHANGE PARTITION part02 WITH TABLE hash_part02;

这时,分区表hash_example中的part02分区的资料将被转移到hash_part02这个非分区表中。

七、索引
在分区表上可以建立三种类型的索引:1、和普通表一样的全局索引。2、全局分区索引。3、本地分区索引。
它们之间的区别如下图示。

以表range_example为例。
1.建立普通的索引
create index com_index_range_example_id on range_example(id);

2.建立本地分区索引
create index local_index_range_example_id on range_example(id)local;

3.建立全局分区索引
create index gidx_range_exampel_id on range_example(id)
GLOBAL partition by range(id)
(
part_01 values less than(1000),
part_02 values less than(MAXVALUE)
);

对于分区索引的删除,local index 不能指定分区名称,单独的删除分区索引。local index 对应的分区会伴随着data分区的删除而一起被删除。
global partition index 可以指定分区名称,删除某一分区。但是有一点要注意,如果该分区不为空,则会导致更高一级的索引分区被置为UNUSABLE 。
ALTER INDEX gidx_range_exampel_id drop partition part_01 ; 此句将导致part_02 状态为UNUSABLE 。

看完上述内容,你们掌握Oracle分区表 Partition Table的创建及管理是怎么样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

分区表 索引 个数 名称 类型 全局 范围 管理 不同 普通 之间 关键 关键字 内容 子句 方法 更多 标识 系统 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 河南真二互联网科技有限公司 汇久创客互联网科技 易通互联网络科技有限公司 融贸通互联网科技 互联网科技公司介绍 互联网和高科技公司 金融科技与互联网金融相同和不同 互联网经济与金融科技 互联网保险科技创业 互联网金融科技展 佛山市翊博互联网络科技有限公司 怎样加入科技互联网 互联网科技融合创新 容联科技互联网电商 互联网公司属于科技吗 互联网科技手抄报图片 中国科技和美国互联网 求路客互联网科技电话 科技互联网企业在行动 互联网属科技 互联网科技公司做什么 哈尔滨秒房互联网科技有限公司 互联网科技扶贫时间 深圳市罗太互联网科技有限公司 广东工业互联网大赛深圳学泰科技 黑云互联网科技有限公司 宁波跨境商互联网科技有限公司 现代互联网科技公司 利用互联网等科技手段
0