DBAtlas · 数据库运维图谱

创建 interval 分区并将现有 range 表转换为 interval

Oracle分区

命令

-- New table: a partition is created automatically for each month
CREATE TABLE customer_app.measurements (
  ts        DATE   NOT NULL,
  sensor_id NUMBER,
  value     NUMBER)
PARTITION BY RANGE (ts) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
( PARTITION p_first VALUES LESS THAN (DATE '2026-01-01') );

-- Convert an existing range table to interval (there must be no MAXVALUE partition):
ALTER TABLE customer_app.sale_part SET INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'));
-- Back to range: ALTER TABLE customer_app.sale_part SET INTERVAL ();

-- Rename a system-named partition to a meaningful name:
ALTER TABLE customer_app.measurements RENAME PARTITION FOR (DATE '2026-03-15') TO p2026_03;

-- Check:
SELECT partition_name, partition_position, interval, high_value
FROM   dba_tab_partitions
WHERE  table_owner = 'CUSTOMER_APP' AND table_name = 'MEASUREMENTS'
ORDER  BY partition_position;

SELECT table_name, partitioning_type, interval
FROM   dba_part_tables
WHERE  owner = 'CUSTOMER_APP';

作用

interval 分区在超出最后边界的第一行到达时自动创建新分区,消除因忘记创建下个月分区而导致的 ORA-14400 错误。SET INTERVAL 可在不移动数据的情况下转换现有 range 表。

适用场景

用于按日期增长的表,例如时间序列、日志和订单,并减少分区维护脚本。

注意

需要 Partitioning 选件(EE 额外付费)。分区键必须是单个 NUMBER/DATE/TIMESTAMP 列;必须先删除 MAXVALUE 分区。错误或极端的日期(例如 9999 年)会打开一个很远的分区并扰乱分区编号;间隔较窄时可能接近 1,048,575 个分区的上限(ORA-14300),因此请在应用中校验日期。自动创建的分区会进入表的默认表空间(用 STORE IN 指定)。

在 DBAtlas 中打开 →

相关内容