OceanBase
  • 产品
  • 解决方案
  • 客户
  • 合作伙伴
  • 资源与服务
  • 文档
  • 社区
云控制台登录 / 注册
  • 免费试用
本地部署
OceanBase 分布式数据库

首批通过分布式安全可靠测评,为关键业务系统打造

OceanBase 集中式数据库

集中式架构,兼具性能与成本优势的集中式数据库

OceanBase 社区版

兼容 MySQL 的单机分布式一体化开源数据库

OceanBase seekdb

为现代 AI 应用打造的开源混合搜索数据库

云上部署
OB Cloud

一体化云数据库,打造面向多云的一致性体验

一体机
OceanBase 数据库一体机

软硬一体,提供极致性能与高可靠性保障

OceanBase AI 一体机

基于 OceanBase AI Stack 的智能一体机

工具
迁移评估工具(OMA)
数据迁移工具(OMS)
开发者工具(ODC)
运维管理工具(OCP)
自治服务工具(OAS)
一体化关键能力
TP 事务处理

面向关键业务负载的事务处理能力,保障大规模业务稳定运行与数据零丢失

AP 实时分析

原生支持事务与分析融合,低延迟洞察业务数据,驱动智能决策与敏捷运营

AI 现代负载

湖库一体管理多模态数据离在线处理,AI 原生支撑 Agent 规模化应用

oceanbase白皮书

OceanBase 一体化分布式数据库

通用场景
全场景业务系统 OLTP
实时分析混合负载
异地多活
多基础设施部署
一站式传统数据库升级
混合云部署
一库多芯软硬件混合部署
分布式数据库单机部署
大存储类数据库降本
冷数据归档降本
多实例资源整合
分库分表一体化升级
高并发场景
数据中台
行业解决方案
国有大行和股份制银行核心系统解决方案
区域性银行核心系统解决方案
寿险核心系统解决方案
产险核心系统解决方案
资管交易类系统解决方案
资管 TA 清算类系统解决方案
运营商核心系统解决方案
人社核心系统解决方案
电力核心系统解决方案
行业专区
银行专区

助力银行完成各类核心业务系统升级

保险专区

寿险、产险核心系统升级的更佳选择

零售专区

助力200+零售行业客户规模化落地

DB 大咖说
oceanbase爱奇艺

百亿级卡券业务的“单库双擎”架构升级

oceanbase四川银行

800个测试用例选定分布式数据库

oceanbase太平洋保险

先难后易,核心系统数据库升级复盘

行业案例
oceanbase交通银行

核心数据库的“分布式革命”

oceanbase中国移动

B域核心CRM&BOSS近乎零改造分布式升级

oceanbase理想

打造领先的智能制造系统和自动驾驶体验

演讲实录
oceanbase中国联通

集团应用分布式数据库覆盖B/O/M域

oceanbase国泰海通

智能推送系统稳定支撑单日亿级消息处理量

oceanbase中国联合航空

中国首款机票盲盒背后的数据库力量

用户实践
oceanbase北京银行

最快速度完成40余套系统国产数据库升级

oceanbaseVIVO

替换 MySQL 分库分表,探索成本效益最优

oceanbase滴滴

数据库大规模运维体系建设及落地实践

合作伙伴
合作伙伴类型
联合解决方案
产业生态伙伴
经销商伙伴
技术服务伙伴
培训认证伙伴
生态联合解决方案
神州信息 x OceanBase 银行核心系统
长亮科技 x OceanBase 新核心系统
中电金信 x OceanBase 金融分布式核心系统
天阳科技 x OceanBase 贷记卡方案
易诚互动 x OceanBase 手机银行方案
恒生 x OceanBase UF3.0/O45/TA/估值方案
商业发行版
云树®数据库软件 ActionDB
服务
支持与服务
提交工单
软件下载
OceanBase 企业版
OceanBase 社区版
OB Cloud
学习
培训与认证
在线课堂
在线体验
开发者
开发者中心
资料
行业报告与白皮书
官方博客
年度发布会资料
开发者大会资料
oceanbase白皮书

金融核心系统数据库升级路径与场景实践

oceanbase白皮书

人社关键业务数据库一体化升级实践

产品文档
oceanbaseOceanBase 数据库
驱动和中间件
oceanbaseOB Cloud 云数据库
工具与组件
oceanbaseOceanBase 数据库一体机
快速上手
OceanBase 数据库
OB Cloud 云数据库
知识库
汇聚常见产品使用问题案例
在线体验

Demo与实验,感受 OceanBase 的核心能力与应用场景

OceanBase 最佳实践
了解 OceanBase 分布式数据库的架构与系统原理
技术博客

技术解析 | 用户实践 | 社区月报

在线课堂

电子书 |视频课程|在线培训

Developer Hub
应用开发Demo | 数据开发与集成工具
问答论坛

快速答疑 | 常见问题 | 技术交流

社区活动

Meetup | 技术公开课

GitHub

查看源码 | 贡献代码 | 建议反馈

加入社区

社区组织 | 社区用户贡献 |开发者贡献

进入社区首页
oceanbase数据库大赛

第五届OceanBase数据库大赛

oceanbase免费课程
从故障处理到性能调优:OceanBase资深DBA进阶培训
切换语言
  • 中文站 - 简体中文
  • International - English
  • 日本站 - 日本語
文档反馈
  1. 文档中心
  2. OceanBase 数据库企业版
  3. 分布式版
  4. V3.2.3
  5. 使用指南
  6. 分布式存储管理
  7. 管理分区
  8. Oracle 模式
  9. 创建二级分区表
分布式版-V3.2.3企业版LTS
  • V3.2.3 文档更新记录
  • 文档概览
  • 使用指南
    • 介绍
    • 部署数据库
    • 数据迁移
    • 数据库连接和路由
    • 集群和多租户管理
    • 数据库对象管理
    • 分布式存储管理
      • 数据分布概述
      • 管理分区
        • Oracle 模式
          • 分区概述
          • 创建一级分区表
          • 管理一级分区表
          • 创建二级分区表
          • 管理二级分区表
          • 分区裁剪
          • 指定分区查询数据
          • 创建分区表索引
          • 创建一级分区表表组
          • 将一级分区表加入表组
          • 管理一级分区表表组
          • 创建二级分区表表组
          • 将二级分区表加入表组
          • 管理二级分区表表组
        • MySQL 模式
      • 管理副本
      • 管理 Locality
      • 负载均衡
    • 性能调优
    • 高可用和容灾
    • 数据库安全
    • 运维操作
    • 系统参考
  • 开发指南
  • 系统架构
  • 版本发布记录
  • 术语
  1. 文档中心
  2. OceanBase 数据库企业版
  3. 分布式版
  4. V3.2.3
  5. 使用指南
  6. 分布式存储管理
  7. 管理分区
  8. Oracle 模式
  9. 创建二级分区表

创建二级分区表

更新时间:2023-10-09 15:55:45

编组分享

二级分区是按照两个维度来把数据拆分成分区的操作。最常用的地方是类似用户账单的场景。

二级分区分区类型

OceanBase 数据库的 Oracle 模式目前支持 HASH、RANGE 和 LIST 三种分区⽅式,二级分区为任意两种分区方式的组合。创建二级分区表支持情况详见下表:

二级分区类型 创建模板化二级分区表 创建非模板化二级分区表
Range + Range 支持 支持
Range + List 支持 支持
Range + Hash 支持 支持
List + Range 支持 支持
List + List 支持 支持
List + Hash 支持 支持
Hash + Range 支持 支持
Hash + List 支持 支持
Hash + Hash 支持 支持

创建二级分区表

二级分区表可分为模板化二级分区表和非模板化二级分区表。

创建模板化二级分区表

CREATE TABLE [IF NOT EXISTS] table_name(column_option_list)
  [table_option_list] partition_option_list;

column_option_list:
  column_name column_type [, column_name column_type]

table_option_list:
  table_option [table_option]

table_option:
   LOCALITY [=] locality_name
  | PRIMARY_ZONE [=] primary_zone_name

partition_option_list:
  PARTITION BY 
    RANGE(column_name){subpartition_option} (range_partition_list)
   | LIST(expression){subpartition_option} (list_partition_list)
   | HASH(expression){subpartition_option} { (hash_partition_list)
                                             | PARTITIONS partition_count }

subpartition_option:
  SUBPARTITION BY 
    RANGE(column_name) SUBPARTITION TEMPLATE(range_subpartition_list)
   | LIST(expression) SUBPARTITION TEMPLATE(list_subpartition_list)
   | HASH(expression) { SUBPARTITION TEMPLATE (hash_subpartition_list)
                       | SUBPARTITIONS subpartition_count }

range_partition_list:
  range_partition [, range_partition ...]

range_partition:
  PARTITION partition_name VALUES LESS THAN {(expression_list) | MAXVALUE}

range_subpartition_list:
  range_subpartition [, range_subpartition ...]

range_subpartition:
  SUBPARTITION subpartition_name VALUES LESS THAN {(expression_list) | MAXVALUE}

list_partition_list:
  list_partition [, list_partition ...]

list_partition:
  PARTITION partition_name VALUES {(expression_list) | DEFAULT}

list_subpartition_list:
  list_subpartition [, list_subpartition ...]

list_subpartition:
  SUBPARTITION subpartition_name VALUES {(expression_list) | DEFAULT}

hash_partition_list:
    hash_partition [, hash_partition ...]

hash_partition:
    PARTITION partition_name

hash_subpartition_list:
    hash_subpartition [, hash_subpartition ...]

hash_subpartition:
    SUBPARTITION subpartition_name

expression_list:
  expression [, expression ...]

column_name_list:
  column_name [, column_name ...]

partition_count | subpartition_count:
  INT_VALUE

说明

  • 模板化二级分区表的每个一级分区下的二级分区都按照模板中的二级分区定义,即每个一级分区下的二级分区定义均相同。

  • 对于模板化二级分区表来说,二级分区的命名规则为 ($part_name)s($subpart_name)。例如:对于下⾯的 t_range_range 表,p0下的 3 个二级分区的分区名分别为 p0smp1、p0smp2、p0smp3。

obclient> CREATE TABLE t_range_range(col1 INT,col2 INT)
       PARTITION BY RANGE(col1)
       SUBPARTITION BY RANGE(col2)
       SUBPARTITION TEMPLATE
       (SUBPARTITION mp1 VALUES LESS THAN(100),
        SUBPARTITION mp2 VALUES LESS THAN(200),
        SUBPARTITION mp3 VALUES LESS THAN(300)
        )
       (PARTITION p0 VALUES LESS THAN(2020),
        PARTITION p1 VALUES LESS THAN(2021),
        PARTITION p2 VALUES LESS THAN(2022)
        );
Query OK, 0 rows affected

创建非模板化二级分区表

CREATE TABLE [IF NOT EXISTS] table_name(column_option_list)
  [table_option_list] [partition_option_list];

column_option_list:
  column_name column_type [, column_name column_type]

table_option_list:
  table_option [table_option]

table_option:
  LOCALITY [=] locality_name
  | PRIMARY_ZONE [=] primary_zone_name

partition_option_list:
  PARTITION BY 
    RANGE(column_name){subpartition_option}
      { range_partition_option (subpartition_option_list)
        [, range_partition_option (subpartition_option_list) ...]
       }
   | LIST(expression){subpartition_option}
       { list_partition_option (subpartition_option_list)
        [, list_partition_option (subpartition_option_list) ...]
        }
   | HASH(expression) {subpartition_option}
      { hash_partition_option (subsubpartition_option_list)
       [, hash_partition_option (subsubpartition_option_list) ...]
       }

subpartition_option:
  SUBPARTITION BY { RANGE(column_name) | LIST(expression) | HASH(expression) }

subpartition_option_list:
  range_partition_option_list | list_partition_option_list | hash_partition_option_list

range_partition_option_list:
  range_partition_option [, range_partition_option ...]

list_partition_option_list:
  list_partition_option [, list_partition_option ...]

hash_partition_option_list:
  hash_partition_option [, hash_partition_option ...]

range_partition_option:
  SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr
  [,SUBPARTITION subpartition_name VALUES LESS THAN range_partition_expr ...]

list_partition_option:
  SUBPARTITION subpartition_name VALUES list_partition_expr
  [, SUBPARTITION subpartition_name VALUES list_partition_expr ...]

hash_partition_option_list:
  SUBPARTITION subpartition_name
  [, SUBPARTITION subpartition_name ...]

说明

非模板化二级分区表的每个一级分区下的二级分区均可以自由定义,即每个一级分区下的二级分区的定义可以相同也可以不同。

参数解释

参数 说明
table_name 指定表名。
column_name 指定列名。
column_type 指定列数据类型。
locality_name 指定副本在 Zone 间的分布情况。例如:F@zone1,F@zone2,F@zone3,R@zone4 表示 zone1、 zone2、zone3 为全功能副本,zone4 为只读副本。
primary_zone_name 指定主 Zone(Leader 副本所在 Zone)。
partition_name 指定一级分区名称。
subpartition_name 指定二级分区名称。
INT_VALUE 指定 hash 或 Key 类型的二级分区个数。

示例

创建模板化二级分区表

  • 创建模板化 Range + Range 分区表。

    obclient> CREATE TABLE t2_m_rr(col1 INT,col2 INT)
           PARTITION BY RANGE(col1)
           SUBPARTITION BY RANGE(col2)
           SUBPARTITION TEMPLATE
             (SUBPARTITION mp0 VALUES LESS THAN(2020),
              SUBPARTITION mp1 VALUES LESS THAN(2021),
              SUBPARTITION mp2 VALUES LESS THAN(2022)
              )
             (PARTITION p0 VALUES LESS THAN(100),
              PARTITION p1 VALUES LESS THAN(200)
              );
    Query OK, 0 rows affected
    
  • 创建模板化 Range + List 分区表。

    obclient> CREATE TABLE t2_m_rl(col1 INT,col2 VARCHAR2(50))
           PARTITION BY RANGE(col1)
           SUBPARTITION BY LIST(col2)
           SUBPARTITION TEMPLATE
             (SUBPARTITION mp0 VALUES('01'),
              SUBPARTITION mp1 VALUES('02'),
              SUBPARTITION mp2 VALUES('03')
              )
             (PARTITION p0 VALUES LESS THAN(100),
              PARTITION p1 VALUES LESS THAN(200)
              );
    Query OK, 0 rows affected
    
  • 创建模板化 Range + Hash 分区表。

    obclient> CREATE TABLE t2_m_rh(col1 INT,col2 VARCHAR2(50))
           PARTITION BY RANGE(col1)
           SUBPARTITION BY HASH(col2) SUBPARTITIONS 5
            (PARTITION p0 VALUES LESS THAN(100),
             PARTITION p1 VALUES LESS THAN(200)
             );
    Query OK, 0 rows affected
    
  • 创建模板化 List + Range 分区表。

    obclient> CREATE TABLE t2_m_lr(col1 INT,col2 varchar2(50))
           PARTITION BY LIST(col2)
           SUBPARTITION BY RANGE(col1)
           SUBPARTITION TEMPLATE
            (SUBPARTITION mp0 VALUES LESS THAN(100),
             SUBPARTITION mp1 VALUES LESS THAN(200),
             SUBPARTITION mp2 VALUES LESS THAN(300)
             )
            (PARTITION p0 VALUES('01'),
             PARTITION p1 VALUES('02')
             );
    Query OK, 0 rows affected
    
  • 创建模板化 List + List 分区表。

    obclient> CREATE TABLE t2_m_ll(col1 INT,col2 varchar2(50))
           PARTITION BY LIST(col1)
           SUBPARTITION BY LIST(col2)
           SUBPARTITION TEMPLATE
           (SUBPARTITION mp0 VALUES('A'),
            SUBPARTITION mp1 VALUES('B'),
            SUBPARTITION mp2 VALUES('C')
            )
           (PARTITION p0 VALUES('01'),
            PARTITION p1 VALUES('02')
            );
    Query OK, 0 rows affected
    
  • 创建模板化 List + Hash 分区表。

    obclient> CREATE TABLE t2_m_lh(col1 INT,col2 VARCHAR2(50))
           PARTITION BY LIST(col1)
           SUBPARTITION BY HASH(col2) SUBPARTITIONS 5
            (PARTITION p0 VALUES('01'),
             PARTITION p1 VALUES('02')
             );
    Query OK, 0 rows affected
    
  • 创建模板化 Hash + Range 分区表。

    obclient> CREATE TABLE tbl2_m_hr(col1 INT,col2 INT,col3 INT) 
           PARTITION BY HASH(col1)
           SUBPARTITION BY RANGE(col2)
           SUBPARTITION TEMPLATE
            (SUBPARTITION sp0 VALUES LESS THAN(100),
             SUBPARTITION sp1 VALUES LESS THAN(200),
             SUBPARTITION sp2 VALUES LESS THAN(300)
            )
            PARTITIONS 5;
    Query OK, 0 rows affected
    
  • 创建模板化 Hash + List 分区表。

    obclient> CREATE TABLE tbl2_m_hl(col1 INT,col2 INT,col3 INT) 
           PARTITION BY HASH(col1)
           SUBPARTITION BY LIST(col2)
           SUBPARTITION TEMPLATE
            (SUBPARTITION sp0 VALUES(100),
             SUBPARTITION sp1 VALUES(200),
             SUBPARTITION sp2 VALUES(300)
             )
            PARTITIONS 5;
    Query OK, 0 rows affected
    
  • 创建模板化 Hash + Hash 分区表。

    obclient> CREATE TABLE tbl2_m_hh(col1 INT,col2 INT,col3 INT) 
           PARTITION BY HASH(col1)
           SUBPARTITION BY HASH(col2)
            SUBPARTITIONS 3
            PARTITIONS 5;
    Query OK, 0 rows affected
    

创建非模板化二级分区表

  • 创建非模板化 Range + Range 分区表。

    obclient> CREATE TABLE t2_f_rr(col1 INT,col2 INT)
           PARTITION BY RANGE(col1)
           SUBPARTITION BY RANGE(col2)
            (PARTITION p0 VALUES LESS THAN(100)
              (SUBPARTITION sp0 VALUES LESS THAN(2020),
               SUBPARTITION sp1 VALUES LESS THAN(2021)
              ),
             PARTITION p1 VALUES LESS THAN(200)
              (SUBPARTITION sp2 VALUES LESS THAN(2020),
               SUBPARTITION sp3 VALUES LESS THAN(2021),
               SUBPARTITION sp4 VALUES LESS THAN(2022)
               )
             );
    Query OK, 0 rows affected
    
  • 创建非模板化 Range + List 分区表。

    obclient> CREATE TABLE t2_f_rl(col1 INT,col2 VARCHAR2(50))
           PARTITION BY RANGE(col1)
           SUBPARTITION BY LIST(col2)
           (PARTITION p0 VALUES LESS THAN(100)
             (SUBPARTITION sp0 VALUES('01'),
              SUBPARTITION sp1 VALUES('02')
              ),
            PARTITION p1 VALUES LESS THAN(200)
             (SUBPARTITION sp2 VALUES('01'),
              SUBPARTITION sp3 VALUES('02'),
              SUBPARTITION sp4 VALUES('03')
             )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 Range + Hash 分区表。

    obclient> CREATE TABLE t2_f_rh(col1 INT,col2 VARCHAR2(50))
           PARTITION BY RANGE(col1)
           SUBPARTITION BY HASH(col2)
           (PARTITION p0 VALUES LESS THAN(100)
             (SUBPARTITION sp0,
              SUBPARTITION sp1
              ),
            PARTITION p1 VALUES LESS THAN(200)
             (SUBPARTITION sp2,
              SUBPARTITION sp3,
              SUBPARTITION sp4
              )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 List + Range 分区表。

    obclient> CREATE TABLE t2_f_lr(col1 INT,col2 VARCHAR2(50))
           PARTITION BY LIST(col2)
           SUBPARTITION BY RANGE(col1)
           (PARTITION p0 VALUES('01')
             (SUBPARTITION sp0 VALUES LESS THAN(100),
              SUBPARTITION sp1 VALUES LESS THAN(200)
              ),
            PARTITION p1 VALUES('02')
             (SUBPARTITION sp2 VALUES LESS THAN(100),
              SUBPARTITION sp3 VALUES LESS THAN(200),
              SUBPARTITION sp4 VALUES LESS THAN(300)
              )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 List + List 分区表。

    obclient> CREATE TABLE t2_f_ll(col1 INT,col2 varchar2(50))
           PARTITION BY LIST(col1)
           SUBPARTITION BY LIST(col2)
           (PARTITION p0 VALUES ('01', '02')
             (SUBPARTITION sp0 VALUES ('A'),
              SUBPARTITION sp1 VALUES ('B'),
              SUBPARTITION sp2 VALUES ('C')
              )
    ,
            PARTITION p1 VALUES ('03', '04')
             (SUBPARTITION sp3 VALUES ('A'),
              SUBPARTITION sp4 VALUES ('B'),
              SUBPARTITION sp5 VALUES ('C')
              )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 List + Hash 分区表。

    obclient> CREATE TABLE t2_f_lh(col1 INT,col2 VARCHAR2(50))
           PARTITION BY LIST(col1)
           SUBPARTITION BY HASH(col2)
           (PARTITION p0 VALUES('01')
             (SUBPARTITION sp0,
              SUBPARTITION sp1
              ), 
            PARTITION p1 VALUES('02')
             (SUBPARTITION sp2,
              SUBPARTITION sp3,
              SUBPARTITION sp4
              )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 Hash + Range 分区表。

    obclient> CREATE TABLE tbl2_f_hr(col1 INT,col2 INT,col3 INT)
           PARTITION BY HASH(col1)
           SUBPARTITION BY RANGE(col2)
            (PARTITION p0
             (SUBPARTITION sp0 VALUES LESS THAN(100),
              SUBPARTITION sp1 VALUES LESS THAN(200)),
            PARTITION p1
             (SUBPARTITION sp2 VALUES LESS THAN(100),
              SUBPARTITION sp3 VALUES LESS THAN(200)
             )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 Hash + List 分区表。

    obclient> CREATE TABLE t2_f_hl(col1 INT,col2 INT,col3 INT)
           PARTITION BY HASH(col1)
           SUBPARTITION BY LIST(col2)
            (PARTITION p0
              (SUBPARTITION sp0 VALUES(1,3),
               SUBPARTITION sp1 VALUES(4,7)
              ),
             PARTITION p1
              (SUBPARTITION sp2 VALUES(1,3),
               SUBPARTITION sp3 VALUES(4,7)
               )
            );
    Query OK, 0 rows affected
    
  • 创建非模板化 Hash + Hash 分区表。

    obclient> CREATE TABLE t2_f_hh(col1 INT,col2 INT,col3 INT)
           PARTITION BY HASH(col1)
           SUBPARTITION BY HASH(col2)
            (PARTITION p0
              (SUBPARTITION sp0,
               SUBPARTITION sp1
               ),
             PARTITION p1
              (SUBPARTITION sp2,
               SUBPARTITION sp3
               )
            );
    Query OK, 0 rows affected
    

本文目录

二级分区分区类型创建二级分区表创建模板化二级分区表创建非模板化二级分区表参数解释示例创建模板化二级分区表创建非模板化二级分区表
有帮助
无帮助
反馈
AI

OceanBase

OceanBase 海扬数据库始创于 2010 年,是完全自主研发的数据库公司。2020年开始独立商业化运作,历经15年大规模核心场景验证,目前是中国数据库的领军企业之一。从分布式数据库到 AI 数据库,为企业提供安全、稳定、可扩展的数据底座,推动数据基础设施全面拥抱 AI 时代。

关于我们

关于 OceanBase最新动态资质荣誉客户专家委员会招贤纳士合作伙伴年度发布会开发者大会

资源与服务

支持与服务文档知识库软件与工具下载培训与认证在线体验数据库专题视频

社区

快速上手开发者中心博客活动学习问答GitHub

数据库百科

分布式数据库国产数据库OLTP 数据库OLAP 数据库HTAP 数据库数据库向量数据库向量检索

联系我们

服务热线:
400-109-0633
商务咨询
培训认证技术支持媒体合作
京公网安备11010802047223号京公网安备11010802047223号
京ICP备20024574号-1
合字B1.B2-20250395
网站服务协议隐私协议安全响应协议
OceanBase 版权所有 © 2026 基础资源和备案服务由阿里云提供