Oracle 支持 RENAME PARTITION 语法,仅适用于 RANGE/LIST/HASH 分区表,不支持普通表或 IOT;可重命名一级分区,不可重命名子分区;需 ALTER 权限,执行时加 SRX 锁,阻塞 DML 但允许 SELECT,操作毫秒级完成。
RENAME PARTITION 语法是否支持?
oracle
支持直接重命名分区,但仅限于
语句,且要求表必须是范围(
)、列表(
)或哈希(
)分区表。复合分区(如
)中,只能重命名一级分区(top-level partition),不能重命名子分区(subpartition)。
常见错误是误以为该语句适用于普通表或索引组织表(IOT)——它不适用,会报错:
。
执行 RENAME PARTITION 的基本操作
语法非常直接,但需注意权限和锁行为:
必须拥有表的
权限,或在该表所属 schema 下操作
执行时会对整个表加
(Share Row Exclusive)锁,阻塞 DML(INSERT/UPDATE/DELETE),但允许 SELECT
语句本身不涉及数据移动,毫秒级完成,无性能开销
示例:
注意:新分区名不能与现有分区名重复,也不能是 Oracle 保留字(如
、
)。
oracle知识库
oracle知识库下载
下载
重命名后哪些对象会受影响?
重命名只改分区元数据,不改变其物理位置、高水位线或统计信息。但以下对象需手动检查或更新:
分区级统计信息不会自动刷新,建议后续执行
并指定
任何硬编码了旧分区名的 SQL(如
)会报错
或
物化视图日志、分区交换(
)脚本、备份恢复策略中若引用了旧分区名,也需同步更新
为什么有时 RENAME PARTITION 会失败?
除了权限和对象类型问题,最常被忽略的是依赖对象锁定和并行 DDL 环境:
如果表上有正在运行的并行 DML(PDML)或并行查询,可能因内部资源争用导致
类似报错(虽不直接相关,但常共现)
使用了
不影响重命名,但若表启用了闪回数据归档(FDA),需确认归档策略未对分区名做硬性约束
在 RAC 环境中,确保所有实例已同步数据字典缓存,否则可能出现短暂的
内部错误(版本低于 19c 时较常见)
真正麻烦的不是重命名本身,而是散落在应用层、ETL 脚本、监控告警规则里的那些隐式依赖——它们不会报错,只会默默失效。
rename partitionrangelisthashrange-listORA-14045: cannot rename partition of a non-partitioned objectALTERSRXALTER TABLE sales RENAME PARTITION sales_q1_2023 TO sales_q1_2024;DEFAULTMAXVALUEDBMS_STATS.GATHER_TABLE_STATSgranularity => 'PARTITION'SELECT * FROM sales PARTITION (sales_q1_2023)ORA-00928: missing PARTITION keywordORA-02149: specified partition does not existEXCHANGE PARTITIONORA-14402: updating partition key column would cause a partition changeENABLE ROW MOVEMENTORA-00600