ALTER TABLE ... RENAME PARTITION/SUBPARTITION 用于重命名分区或子分区,此操作仅修改元数据,但会使依赖旧名称的脚本失效,执行前需确认新名称唯一并排查代码依赖。
语法介绍
ALTER TABLE table_name RENAME PARTITION old_name TO new_name;
ALTER TABLE table_name RENAME SUBPARTITION old_name TO new_name;参数说明
参数名称 | 参数要求 | 参数说明 | 参数示例 |
| 必填 | 目标分区表的名称。 |
|
| 必填 | 要重命名现有分区或子分区的名称。 |
|
| 必填 | 为分区或子分区指定的新名称。 |
|
注意事项
执行此命令的用户需是该表的所有者,或拥有对该表的
ALTER权限。MOVE PARTITION会获取目标分区的AccessExclusiveLock锁,在锁持有期间,所有对该分区的DDL和DML操作将被阻塞,建议在业务低峰期执行。新分区/子分区名称在表内必须唯一,不能与现有分区或子分区名称冲突。
此命令是
DDL操作,执行后自动提交,无法回滚。如需撤销,需要再次执行RENAME操作将名称改回。如果应用程序代码、存储过程或视图中硬编码了旧的分区名,重命名后将导致这些对象执行失败。执行重命名之前,建议进行全面的影响分析并同步更新所有依赖对象。
使用示例
本示例演示如何将一个复合分区表 customer_data 中的子分区 sp_asia 重命名为 sp_2023_asia,以符合按年份和地区命名的规范。
环境准备
前置检查
执行操作
结果验证
常见问题
Q1:执行时报错 ORA-14078: partition name is already in use?
这是因为您指定的新名称 new_name 已经被该表中的另一个分区或子分区使用,需要更换一个在表内唯一的名称。
Q2:执行时报错 ORA-14076: partition name must be specified?
这是因为您指定的旧名称 old_name 不存在,请通过前置检查核对正确的名称。
Q3:重命名分区后,之前引用该分区的程序或脚本无法工作了,为什么?
这是因为程序或脚本中硬编码了旧的分区名称,重命名后需要同步修改所有显式引用旧名称的代码,将其更新为新名称。
相关语句
ALTER TABLE…ADD PARTITION:为分区表添加新的分区。
ALTER TABLE…MERGE PARTITION:合并两个相邻的分区为一个分区。
ALTER TABLE…SPLIT PARTITION:将一个分区拆分为两个分区。
ALTER TABLE…DROP PARTITION:删除分区表中的指定分区。