Oracle Hybrid Partitioning(混合分区) 是 Oracle 19c 正式推出的核心分区增强特性,允许在同一张逻辑分区表中同时包含内部分区(Internal Partitions,数据库表空间存储)与外部分区(External Partitions,数据库外部文件 / 对象存储),实现热数据高性能、冷数据低成本的统一管理与透明访问Oracle。
一、核心定义与定位
1.1 基本概念
- 内部分区:传统 Oracle 分区,数据存储在数据库数据文件(表空间)中,支持完整 DML、事务、索引、约束,性能最优Oracle。
- 外部分区:基于外部表技术,数据存储在数据库之外(OS 文件、HDFS、OCI 对象存储、Azure Blob、Parquet/ORC/CSV 等),只读、无事务、低成本Oracle。
- 混合分区表:将上述两类分区统一封装为一张逻辑表,应用通过标准 SQL 透明访问,优化器自动执行分区修剪(Partition Pruning)Oracle。
1.2 核心定位
- 解决 ** 数据生命周期管理(ILM)** 痛点:热数据留内部、冷数据迁外部,兼顾性能与成本。
- 实现统一数据访问:无需拆分多表 / 视图,一条 SQL 即可跨内 / 外分区查询。
- 打通数据库与大数据 / 云存储:无缝集成 Hadoop、对象存储等外部数据源Oracle。
二、版本演进(19c → 21c → 23c)
2.1 Oracle 19c(首次发布)
- 支持 ** 单级范围(Range)、列表(List)** 混合分区。
- 外部分区支持驱动:
ORACLE_LOADER、ORACLE_DATAPUMP、ORACLE_HDFS、ORACLE_HIVE、ORACLE_BIGDATAOracle。 - 基础 DDL:
CREATE/ALTER TABLE支持EXTERNAL PARTITION ATTRIBUTES与分区级EXTERNAL子句Oracle。
2.2 Oracle 21c(增强)
- 支持In-Memory 加载外部分区,提升外部冷数据查询性能。
- 优化分区修剪与执行计划,混合查询效率提升。
2.3 Oracle 23c(重大增强)
- 新增支持 ** 间隔(Interval)、自动列表(Auto-List)** 混合分区,自动化分区管理Oracle。
- 支持
DBMS_CLOUD一键创建云对象存储混合分区表。 - 视图
DBA_TABLES新增HYBRID列,快速识别混合分区表。
三、核心架构与技术原理
3.1 架构组成
- 逻辑层:混合分区表,对外呈现单表,屏蔽内 / 外存储差异。
- 内部分区层:标准 Oracle 分区,驻留表空间,支持事务、索引、约束。
- 外部分区层:外部表分区,映射外部文件 / 对象存储,只读、无事务。
- 优化器层:自动识别查询条件,执行分区修剪,仅访问必要分区(内 / 外)Oracle。
- 访问驱动层:
ORACLE_LOADER/ORACLE_DATAPUMP/ORACLE_HDFS等,负责外部数据读取Oracle。
3.2 关键技术原理
- 分区修剪(Partition Pruning):查询条件命中分区键时,优化器仅扫描相关内 / 外分区,大幅减少数据读取量Oracle。
- 透明访问:应用无需感知数据存储位置,统一用
SELECT访问,结果自动合并。 - 分层存储:热数据(近 1–3 个月)存内部(高性能),冷数据(历史)存外部(低成本)。
- 在线迁移:支持
ALTER TABLE ... MOVE PARTITION ... TO EXTERNAL,在线将内部分区转为外部分区,无停机。
四、核心特性与能力
4.1 支持的分区类型(23c)
- 单级:Range、List、Interval、Auto-List(23c 新增)。
- 暂不支持:Hash、复合分区(Range-List、Range-Hash)、子分区。
4.2 外部数据源支持
- 文件系统:OS 本地文件(CSV、TXT)。
- 大数据:HDFS、Hive、HBase。
- 云对象存储:OCI Object Storage、Azure Blob、AWS S3(通过
DBMS_CLOUD)Oracle。 - 格式:Parquet、ORC、CSV、Data Pump 文件Oracle。
4.3 核心操作能力
- 创建混合分区表:
CREATE TABLE ... PARTITION BY ... EXTERNAL PARTITION ATTRIBUTES ...Oracle。 - 添加分区:
ALTER TABLE ... ADD PARTITION ...(内部 / 外部均可)。 - 分区迁移:
ALTER TABLE ... MOVE PARTITION ... TO EXTERNAL(内部→外部,在线)。 - 修改外部分区路径:
ALTER TABLE ... MODIFY PARTITION ... LOCATION (...)。 - 查询:标准
SELECT,自动分区修剪,内 / 外数据统一返回Oracle。
4.4 限制(重要)
- 外部分区只读,不支持
INSERT/UPDATE/DELETE。 - 外部分区不支持索引、约束、触发器。
- 不支持
LOB、LONG类型外部分区。 - 23c 前不支持 Interval/Auto-List 混合分区。
五、核心价值与适用场景
5.1 核心价值
表格
| 价值维度 | 具体收益 |
|---|---|
| 成本优化 | 冷数据迁对象存储,存储成本降低 70%–90%,热数据保留高性能 |
| 性能提升 | 分区修剪 + 内部高性能存储,热数据查询毫秒级;外部分区按需加载 |
| 统一管理 | 单表管理全生命周期数据,无需多表 / 视图拆分,简化应用 |
| 透明访问 | 应用无改造,一条 SQL 跨内 / 外查询,降低开发复杂度 |
| ILM 自动化 | 23c 支持 Interval/Auto-List,自动创建新分区、迁移冷数据 |
| 云原生兼容 | 无缝对接 OCI 等云对象存储,适配混合云 / 多云架构 |
5.2 典型适用场景
- 时间序列数据(订单 / 日志 / 交易):近 3 个月热数据存内部,历史数据迁对象存储。
- 数据仓库 / BI 分析:明细数据冷存储,汇总 / 热数据内部,兼顾查询与成本。
- 合规归档:金融 / 医疗需长期留存的历史数据,低成本外部存储,随时可查。
- 大数据融合:Oracle 数据库与 Hadoop / 对象存储数据统一分析。
- 混合云数据管理:本地热数据 + 云端冷数据,统一访问。
六、快速上手(SQL 示例)
6.1 创建混合分区表(23c Interval 示例)
sql
-- 1. 创建目录对象(指向外部存储)
CREATE DIRECTORY ext_dir AS '/u01/external_data';
GRANT READ, WRITE ON DIRECTORY ext_dir TO hr;
-- 2. 创建 Interval 混合分区表(内部+外部)
CREATE TABLE hybrid_orders (
order_id NUMBER,
order_date DATE,
amount NUMBER(10,2),
status VARCHAR2(20)
)
PARTITION BY RANGE (order_date)
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) -- 23c 支持 Interval
EXTERNAL PARTITION ATTRIBUTES (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_dir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
MISSING FIELD VALUES ARE NULL
)
LOCATION ('orders_2024*.csv')
)
(
-- 内部分区(热数据:2026 年)
PARTITION p_2026 VALUES LESS THAN (TO_DATE('01-JAN-2027', 'DD-MON-YYYY'))
TABLESPACE users, -- 内部表空间
-- 外部分区(冷数据:2025 年)
PARTITION p_2025 VALUES LESS THAN (TO_DATE('01-JAN-2026', 'DD-MON-YYYY'))
EXTERNAL
);
6.2 分区迁移(内部→外部,在线)
sql
-- 将 2024 年内部分区转为外部分区
ALTER TABLE hybrid_orders
MOVE PARTITION p_2024
TO EXTERNAL
LOCATION ('orders_2024.csv');
6.3 透明查询(自动分区修剪)
sql
-- 仅访问 2026 年内部分区(热数据)
SELECT * FROM hybrid_orders WHERE order_date >= TO_DATE('01-JAN-2026', 'DD-MON-YYYY');
-- 仅访问 2025 年外部分区(冷数据)
SELECT * FROM hybrid_orders WHERE order_date BETWEEN TO_DATE('01-JAN-2025', 'DD-MON-YYYY') AND TO_DATE('31-DEC-2025', 'DD-MON-YYYY');
-- 跨内/外分区查询(自动合并结果)
SELECT * FROM hybrid_orders WHERE amount > 1000;
七、与传统方案对比
表格
| 方案 | 混合分区(Hybrid Partitioning) | 传统分区 + 外部表 | 视图合并 |
|---|---|---|---|
| 数据访问 | 单表透明访问,自动分区修剪 | 多表 / 外部表,需手动关联 | 视图封装,优化器受限 |
| ILM 管理 | 内置分区迁移,在线操作 | 手动迁移,复杂度高 | 无内置迁移能力 |
| 性能 | 最优(分区修剪 + 内部高性能) | 一般(手动关联) | 较差(视图 overhead) |
| 成本 | 最优(冷热分层) | 较高(全内部或多表) | 一般 |
| 应用改造 | 无 | 需改造 | 需改造 |
八、运维与监控
8.1 关键视图
sql
-- 查看混合分区表
SELECT table_name, hybrid FROM dba_tables WHERE hybrid = 'YES';
-- 查看分区类型(内部/外部)
SELECT table_name, partition_name, tablespace_name, external
FROM dba_tab_partitions
WHERE table_name = 'HYBRID_ORDERS';
8.2 运维要点
- 分区迁移:优先在业务低峰期执行,避免影响性能。
- 外部文件管理:定期清理 / 归档外部文件,确保路径有效。
- 性能监控:通过
AWR/ASH监控外部分区查询延迟,必要时加载到 In-Memory(21c+)。 - 补丁升级:混合分区依赖外部表驱动,确保数据库版本与驱动兼容。
九、总结与最佳实践
9.1 总结
Oracle Hybrid Partitioning 是数据生命周期管理的革命性方案,通过内 / 外分区统一封装,实现 “热数据高性能、冷数据低成本、全数据透明访问”,完美适配 OLTP/OLAP 混合负载与云原生架构。
9.2 最佳实践
- 按时间分区:优先使用 Range/Interval(23c),适配时间序列数据。
- 冷热分层:近 1–3 个月数据留内部,历史数据迁外部。
- 在线迁移:使用
MOVE PARTITION ... TO EXTERNAL在线迁移,无停机。 - 23c 升级:生产环境优先升级至 23c,获取 Interval/Auto-List 自动化能力。
- 云集成:搭配 OCI 对象存储,实现混合云数据管理。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




