不能在已有List分区表上添加DEFAULT分区,必须建表时定义;ALTER TABLE ADD PARTITION VALUES (DEFAULT)语法不被允许,会报ORA-14323错误;唯一合法方式是在CREATE TABLE时显式声明PARTITION p_default VALUES (DEFAULT)。
不能在已有list分区表上添加default分区,必须建表时就定义。
ALTER TABLE ADD PARTITION VALUES (DEFAULT) 会报 ORA-14323
执行 ALTER TABLE t ADD PARTITION p_def VALUES (DEFAULT) 一定会失败,错误是 ORA-14323: cannot add partition when DEFAULT partition exists——哪怕当前表根本没有 DEFAULT 分区,这个语法本身就不被允许。Oracle 的 ADD PARTITION 只接受明确的 VALUES ('A', 'B') 列表,不接受 DEFAULT 关键字,这是语法硬限制,不是权限或顺序问题。
唯一合法路径:CREATE TABLE 时显式声明 DEFAULT 分区
必须在建表语句中一次性写全,包括 PARTITION BY LIST (col) 和 PARTITION p_default VALUES (DEFAULT) 子句:
CREATE TABLE sales_by_region (
region VARCHAR2(10),
amount NUMBER
) PARTITION BY LIST (region) (
PARTITION p_north VALUES ('NORTH'),
PARTITION p_south VALUES ('SOUTH'),
PARTITION p_default VALUES (DEFAULT)
);
-
PARTITION BY LIST (col)括号不能省,列名必须写出,不支持多列省略写法 -
VALUES (DEFAULT)必须作为PARTITION定义的一部分,不能单独追加 - 不能和
AUTOMATIC同时出现;如果用了AUTOMATIC,就必须至少定义一个非-DEFAULT 初始分区
已有表没 DEFAULT 分区?只能重建
如果表已上线、数据量大(比如 default 分区占 95%+),又想补 DEFAULT 分区,没有“在线添加”方案:
- 导出数据(例如用
expdp或INSERT /*+ APPEND */ INTO ... SELECT) - 新建带
VALUES (DEFAULT)的表结构 - 导入数据
- 重命名切换(
RENAME+DROP原表)
注意:重建过程涉及锁、空间、时间开销,且 DEFAULT 分区存在后,后续所有 ADD PARTITION 都会被阻断,这点容易被忽略。


















