ALTER TABLE ... TRUNCATE SUBPARTITION 用于清空复合分区表中指定子分区内的全部数据,此操作会永久移除数据但保留子分区结构,执行前需确认数据不再需要或已备份。
语法介绍
ALTER TABLE table_name
TRUNCATE SUBPARTITION subpartition_name
[{DROP|REUSE} STORAGE]参数说明
参数名称 | 参数要求 | 参数说明 | 参数示例 |
| 必填 | 目标复合分区表的名称。 |
|
| 必填 | 要清空的子分区的名称。 |
|
| 选填 | 子句仅为兼容 Oracle 语法而存在,会被解析但实际忽略,不影响存储行为。 |
|
注意事项
执行此命令的用户需是该表的所有者,或拥有对该表的
ALTER权限。该操作会获取
AccessExclusiveLock(表级排他锁),阻塞该表的所有 DML 和大部分 DDL 操作。建议在业务低峰期执行,并预留足够的时间窗口。TRUNCATE SUBPARTITION是一项DDL操作,会隐式提交当前事务,一旦执行,被删除的数据无法通过ROLLBACK回滚。请在操作前完成数据备份。TRUNCATE SUBPARTITION是元数据操作+文件删除,即使亿级数据也可秒级完成,I/O 和CPU/内存开销极低。
使用示例
本示例演示如何在一个按注册年份(RANGE)和用户所在地区(LIST)进行复合分区的客户表中,清空2022年度亚洲地区的用户数据子分区。
常见问题
Q1:TRUNCATE SUBPARTITION 和 DROP SUBPARTITION 有什么区别?
TRUNCATE SUBPARTITION仅清空子分区内的数据但保留其定义,而DROP SUBPARTITION 会将子分区定义和数据一并删除。
Q2:执行 TRUNCATE SUBPARTITION 后,数据可以恢复吗?
不可以,因为 TRUNCATE 是一项DDL操作,它会永久删除数据且默认不记录在事务日志中,无法通过常规手段回滚或闪回。
Q3:TRUNCATE SUBPARTITION 和 DELETE FROM ... SUBPARTITION 有什么区别?
TRUNCATE SUBPARTITION 是高效的DDL操作,通过释放数据块直接删除数据且无法回滚,而DELETE是逐行删除的DML操作,会记录日志、可回滚并触发删除触发器。
Q4:执行此命令为什么提示 ORA-02149:relation ... does not exist?
子分区名不存在或大小写不匹配。名称大小写敏感,请先前置检查确认名称。
Q5:执行此命令为什么提示 ORA-01031: insufficient privileges?
这是因为执行该命令的用户不具备目标表的 ALTER 权限,需要联系数据库管理员授予相应权限。
相关语句
ALTER TABLE…DROP SUBPARTITION:删除子分区定义及其包含的数据。
ALTER TABLE…TRUNCATE PARTITION:清空一级分区及其下所有子分区的数据。
ALTER TABLE… ADD SUBPARTITION:为现有的一级分区添加新的子分区。
ALTER TABLE…SPLIT SUBPARTITION:将一个子分区划分为两个子分区。