概述
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和查询操作
核心操作
- 在线合并分区
- 在线更改分区表类型(如哈希分区转范围分区)
语法示例
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
总结
三大关键词
-
"向外扩展" (Extend Outward)
通过分区外部表将分区功能扩展到大数据平台
-
"彻底在线" (Complete Online)
全面的在线维护操作提升业务敏捷性和可用性
-
"更加灵活" (More Flexible)
间隔组合分区和只读分区提供更丰富的数据管理策略
演进意义
这些特性为Oracle 19c更强大的混合分区表铺平道路,构建了现代化、高可用企业级数据管理平台的技术基础。