暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Hybrid Partitioning

原创 张超 2026-03-30
18

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_LOADERORACLE_DATAPUMPORACLE_HDFSORACLE_HIVEORACLE_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 架构组成


  1. 逻辑层:混合分区表,对外呈现单表,屏蔽内 / 外存储差异。
  2. 内部分区层:标准 Oracle 分区,驻留表空间,支持事务、索引、约束。
  3. 外部分区层:外部表分区,映射外部文件 / 对象存储,只读、无事务。
  4. 优化器层:自动识别查询条件,执行分区修剪,仅访问必要分区(内 / 外)Oracle。
  5. 访问驱动层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
  • 外部分区不支持索引、约束、触发器
  • 不支持 LOBLONG 类型外部分区。
  • 23c 前不支持 Interval/Auto-List 混合分区。




五、核心价值与适用场景


5.1 核心价值


表格

价值维度具体收益
成本优化冷数据迁对象存储,存储成本降低 70%–90%,热数据保留高性能
性能提升分区修剪 + 内部高性能存储,热数据查询毫秒级;外部分区按需加载
统一管理单表管理全生命周期数据,无需多表 / 视图拆分,简化应用
透明访问应用无改造,一条 SQL 跨内 / 外查询,降低开发复杂度
ILM 自动化23c 支持 Interval/Auto-List,自动创建新分区、迁移冷数据
云原生兼容无缝对接 OCI 等云对象存储,适配混合云 / 多云架构


5.2 典型适用场景


  1. 时间序列数据(订单 / 日志 / 交易):近 3 个月热数据存内部,历史数据迁对象存储。
  2. 数据仓库 / BI 分析:明细数据冷存储,汇总 / 热数据内部,兼顾查询与成本。
  3. 合规归档:金融 / 医疗需长期留存的历史数据,低成本外部存储,随时可查。
  4. 大数据融合:Oracle 数据库与 Hadoop / 对象存储数据统一分析。
  5. 混合云数据管理:本地热数据 + 云端冷数据,统一访问。




六、快速上手(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 最佳实践


  1. 按时间分区:优先使用 Range/Interval(23c),适配时间序列数据。
  2. 冷热分层:近 1–3 个月数据留内部,历史数据迁外部。
  3. 在线迁移:使用 MOVE PARTITION ... TO EXTERNAL 在线迁移,无停机。
  4. 23c 升级:生产环境优先升级至 23c,获取 Interval/Auto-List 自动化能力。
  5. 云集成:搭配 OCI 对象存储,实现混合云数据管理。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论