oracle 19c 不存在 auto_partitioning 初始化参数,所谓“自动分区”仅指 interval 分区(建表时定义)和 dbms_auto_index(自动索引),二者无关且均不依赖全局参数。
oracle 19c 没有名为 auto_partitioning 的初始化参数,也无法通过设置该参数开启“自动分区”功能。 这个名字是常见误解,官方文档和数据字典中均不存在该参数。所谓“自动分区”,实际指的只有两种机制:interval 分区(自动创建新分区)和 dbms_auto_index(自动索引),二者完全无关,且都不靠全局参数开关。
INTERVAL 分区不是靠参数开启,而是建表时声明
真正能实现“插入数据时自动新建分区”的,只有 INTERVAL 分区,但它不是运行时启用的功能,而是在 CREATE TABLE 语句中显式定义的结构特性:
-
INTERVAL必须搭配PARTITION BY RANGE使用,不能用于 LIST/HASH - 必须先定义至少一个初始
RANGE分区(如PARTITION p_init VALUES LESS THAN (TO_DATE('2024-01-01','YYYY-MM-DD'))),否则建表失败 -
INTERVAL子句必须用合法函数,例如NUMTOYMINTERVAL(1,'MONTH')或NUMTODSINTERVAL(7,'DAY');写成INTERVAL '1' MONTH会报ORA-14751 - 自动创建的分区名固定为
SYS_P*格式,无法自定义,也无法指定表空间——默认全部落在主表所在表空间
DBMS_AUTO_INDEX 和 AUTO_PARTITIONING 完全无关
有人混淆了 DBMS_AUTO_INDEX(自动索引)和分区,因为名字里都有“auto”。但:
-
DBMS_AUTO_INDEX管理的是索引生命周期,不碰表结构、不分区、不生成新段 - 其配置项如
auto_index_mode在视图CDB_AUTO_INDEX_CONFIG中查到,但这些跟分区毫无关系 - 试图在
ALTER SYSTEM中设AUTO_PARTITIONING=ON会直接报ORA-00942: table or view does not exist或ORA-02065(非法的 ALTER SYSTEM 选项)
为什么你搜到的“AUTO_PARTITIONING”可能是错的
这个术语常出现在非官方博客、过时资料或误译文档中,可能源于以下混淆:
- 把
DBMS_AUTO_INDEX.CONFIGURE的调用误读为“自动分区配置” - 将 12c 引入的
AUTO_LIST(用于复合分区的子分区按需生成)张冠李戴到主分区上 - 把第三方工具或中间件封装的调度脚本(如定时执行
ALTER TABLE ... ADD PARTITION)称为“自动分区参数” - 某些测试环境启用了未公开的隐藏参数(如
_partition_auto_create),但 Oracle 明确标注为 unsupported,生产环境严禁使用
真正可控的“自动化”只发生在建表那一刻——选对 INTERVAL 单位、确认分区键类型(必须是 DATE/TIMESTAMP 或数值)、预留好表空间容量。后续分区是否生成,只取决于插入数据是否超出当前最高 HIGH_VALUE,不受任何运行时参数调控。这点最容易被忽略:没有“开关”,只有“结构契约”。











