【Oracle Database 分区表】之新特性_18c(三)

概述

Oracle Database 18c在分区技术的在线操作性、外部集成和灵活性方面有显著增强,为构建现代化数据管理平台提供强大支撑。

核心新特性

特性一:分区外部表 (Partitioned External Tables)

特性描述
  • 允许将外部存储(HDFS、操作系统文件系统)的文件映射为Oracle数据库的分区表
  • 外部数据分区可与内部数据分区在同一条SQL中透明查询
  • 支持分区修剪(Partition Pruning)
  • 为19c混合分区表奠定基础
核心优点

实现"数据湖"中低成本存储文件的高性能原地查询,无需数据导入

语法示例
sql 复制代码
-- 创建按时间范围分区的外部表,映射到HDFS目录
CREATE TABLE external_sales_partitioned (
    prod_id     NUMBER,
    cust_id     NUMBER,
    time_id     DATE,
    amount_sold NUMBER
)
ORGANIZATION EXTERNAL (
    TYPE ORACLE_HDFS  -- 使用ORACLE_HDFS驱动访问Hadoop
    DEFAULT DIRECTORY hadoop_dir
    ACCESS PARAMETERS (...)
)
PARTITION BY RANGE (time_id)
(
    PARTITION sales_2023_q1 VALUES LESS THAN (TO_DATE('2023-04-01', 'YYYY-MM-DD'))
      LOCATION ('/hadoop/sales/data_2023_q1'),
    PARTITION sales_2023_q2 VALUES LESS THAN (TO_DATE('2023-07-01', 'YYYY-MM-DD'))
      LOCATION ('/hadoop/sales/data_2023_q2')
);

-- 利用分区修剪优化查询
SELECT SUM(amount_sold) FROM external_sales_partitioned 
WHERE time_id BETWEEN DATE '2023-04-01' AND DATE '2023-04-30';

特性二:全面的在线分区维护操作

特性描述
  • 所有分区维护操作都支持在线完成
  • 允许在维护期间进行并发的DML和查询操作
核心操作
  1. 在线合并分区
  2. 在线更改分区表类型(如哈希分区转范围分区)
语法示例
sql 复制代码
-- 1. 在线合并两个分区
ALTER TABLE orders 
  MERGE PARTITIONS orders_q1_2023, orders_q2_2023 
  INTO PARTITION orders_h1_2023
ONLINE UPDATE INDEXES;

-- 2. 在线更改分区类型(哈希分区表转范围分区表)
ALTER TABLE sales_hash 
  MODIFY PARTITIONING TYPE TO RANGE (sale_date)
  (PARTITION p_hist VALUES LESS THAN (DATE '2023-01-01'),
   PARTITION p_current VALUES LESS THAN (MAXVALUE))
ONLINE UPDATE INDEXES;
核心优点

支持7×24小时不间断运维,提升生产系统灵活性和可用性

特性三:间隔分区支持组合分区

特性描述
  • 扩展间隔分区能力,支持作为顶级分区策略用于组合分区
  • 支持多种组合类型:
    • INTERVAL-RANGE
    • INTERVAL-LIST
    • INTERVAL-HASH
核心优点

实现自动分区创建的同时,使用二级子分区进行精细数据划分

语法示例
sql 复制代码
-- 创建间隔-列表组合分区表
CREATE TABLE call_detail_records (
    id NUMBER,
    date_of_call DATE,
    region VARCHAR2(10),
    ...
)
PARTITION BY RANGE (date_of_call)
  INTERVAL (NUMTODSINTERVAL(1, 'DAY'))  -- 顶级分区:按日间隔自动创建
  SUBPARTITION BY LIST (region)          -- 子分区:按地区列表划分
  SUBPARTITION TEMPLATE (                -- 定义子分区模板
      SUBPARTITION east VALUES ('NY', 'NJ'),
      SUBPARTITION west VALUES ('CA', 'WA'),
      SUBPARTITION other VALUES (DEFAULT)
  )
(PARTITION p_initial VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')));

特性四:只读分区 (Read-Only Partitions)

特性描述
  • 可为特定分区单独设置只读属性
  • 只读分区允许查询但禁止DML修改
  • 适用于历史归档分区管理
语法示例
sql 复制代码
-- 1. 创建表时指定只读分区
CREATE TABLE archived_orders (
    order_id NUMBER,
    order_date DATE,
    ...
)
PARTITION BY RANGE (order_date)
(
    PARTITION p_2020 VALUES LESS THAN (DATE '2021-01-01') READ ONLY,
    PARTITION p_2021 VALUES LESS THAN (DATE '2022-01-01') READ ONLY,
    PARTITION p_current VALUES LESS THAN (MAXVALUE) READ WRITE
);

-- 2. 修改已有分区为只读
ALTER TABLE archived_orders MODIFY PARTITION p_2022 READ ONLY;

-- 向只读分区插入数据会失败
INSERT INTO archived_orders VALUES (1, DATE '2020-06-15', ...) 
  PARTITION (p_2020);
-- ORA-14466: Data in a read-only partition or subpartition cannot be modified

总结

三大关键词

  1. "向外扩展" (Extend Outward)

    通过分区外部表将分区功能扩展到大数据平台

  2. "彻底在线" (Complete Online)

    全面的在线维护操作提升业务敏捷性和可用性

  3. "更加灵活" (More Flexible)

    间隔组合分区和只读分区提供更丰富的数据管理策略

演进意义

这些特性为Oracle 19c更强大的混合分区表铺平道路,构建了现代化、高可用企业级数据管理平台的技术基础。

相关推荐
parafeeee6 小时前
程序人生-Hello’s P2P
数据库·后端·asp.net
欲买桂花同载酒5826 小时前
程序人生-Hello’s P2P
运维·服务器·数据库
iPadiPhone6 小时前
流量洪峰下的数据守护者:InnoDB MVCC 全实现深度解析
java·数据库·mysql·面试
NineData6 小时前
AI时代的数据对比:DBA还需要盯着屏幕看差异吗?
运维·数据库
Javatutouhouduan7 小时前
SpringBoot整合reids:JSON序列化文件夹操作实录
java·数据库·redis·html·springboot·java编程·java程序员
QWQ___qwq7 小时前
Spring Security + MyBatis-Plus 实现自定义数据库用户认证
数据库·spring·mybatis
Filotimo_8 小时前
Java后端开发标准流程:从数据库到接口的完整实现
数据库·oracle
泯仲8 小时前
从零起步学习MySQL 第一章:初识MySQL及深入理解内部数据类型
数据库·mysql
有想法的py工程师8 小时前
PostgreSQL 触发器性能评估实战(pg_stat_user_functions)
数据库·postgresql
御坂10101号8 小时前
「2>&1」是什么意思?半个世纪的 Unix 谜题
java·数据库·bash·unix