
AUTOMATIC LIST 在 Oracle 19c 中根本不存在——你无法配置,因为它不是合法语法,也不被内核支持。
CREATE TABLE ... PARTITION BY LIST ... AUTOMATIC 会直接报错
- 执行类似语句时,Oracle 会立刻返回
ORA-00922: missing or invalid option - 某些 JDBC 驱动或 GUI 工具(如 SQL Developer)可能静默忽略
AUTOMATIC关键字,导致你以为建表成功,实际建出来的是普通列表分区 - 验证真实分区类型必须查系统视图:
SELECT partitioning_type FROM user_part_tables WHERE table_name = 'YOUR_TABLE',结果只会是LIST,绝不会是AUTOMATIC LIST
列表分区插入不匹配值时一定报 ORA-14400
- 列表分区路由完全静态:每条插入记录的分区键值必须显式落在某个
VALUES子句中 - 即使定义了
DEFAULT分区,也只是兜底容器,不会触发任何自动建分区行为 - 不存在后台任务、触发器或隐式逻辑来“补分区”——这是硬编码限制,不是配置问题
替代方案只能用 INTERVAL RANGE,但有强约束
- 仅支持
DATE、TIMESTAMP或数值类型(生产环境基本只用日期) - 字符串类分区键(如
'202401'、'SHANGHAI')无法直接用于INTERVAL - 若原业务用字符串枚举值(如省份、状态码),需额外建辅助列映射为有序数值,再以此列建
INTERVAL RANGE分区 - 示例合法建表语句:
CREATE TABLE t (id NUMBER, dt DATE) PARTITION BY RANGE (dt) INTERVAL (NUMTOYMINTERVAL(1,'MONTH')) (PARTITION p_init VALUES LESS THAN (TO_DATE('2024-01-01','YYYY-MM-DD')));注意:INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))是唯一合法写法,INTERVAL '1' MONTH会报ORA-14751
自动分区名和表空间不可控是高频踩坑点
- Oracle 自动生成的分区名形如
SYS_P123456,无法自定义 - 所有自动创建的分区默认落在原表所在表空间,不会按时间自动分到不同表空间
- 若需按年/月隔离表空间,必须在分区生成后手动执行
ALTER TABLE ... MOVE PARTITION ... TABLESPACE,该操作会锁分区、产生大量 redo,不适合写入密集场景
真正容易被忽略的,是误以为“写了 AUTOMATIC 就等于启用了自动能力”——Oracle 19c 的列表分区从设计上就不允许动态扩展,所有试图绕过这一限制的脚本或工具层封装,最终都会在数据插入时暴露问题。


















