首批通过分布式安全可靠测评,为关键业务系统打造
Truncate 分区
更新时间:2026-06-23 18:12:04
您可以根据业务需要,清空分区表中分区的数据,保留分区结构。
分区表对 Truncate 分区操作的支持情况
OceanBase 数据库中,一级分区表和二级分区表对 Truncate 分区操作的具体支持情况如下表所示。
| 分区表 | Truncate 一级分区 | Truncate 二级分区 | |
|---|---|---|---|
| 一级分区表 | Range / Range Columns / List / List Columns | 支持 | - |
| 一级分区表 | Hash / Key | 不支持 | - |
| 二级分区表 | Range + Range / Range + Range Columns / Range + List / Range + List Columns | 支持 | 支持 |
| 二级分区表 | Range + Hash / Range + Key | 支持 | 不支持 |
| 二级分区表 | Range Columns + Range / Range Columns + Range Columns / Range Columns + List / Range Columns + List Columns | 支持 | 支持 |
| 二级分区表 | Range Columns + Hash / Range Columns + Key | 支持 | 不支持 |
| 二级分区表 | List + Range / List + Range Columns / List + List / List + List Columns | 支持 | 支持 |
| 二级分区表 | List + Hash / List + Key | 支持 | 不支持 |
| 二级分区表 | List Columns + Range / List Columns + Range Columns / List Columns + List / List Columns + List Columns | 支持 | 支持 |
| 二级分区表 | List Columns + Hash / List Columns + Key | 支持 | 不支持 |
| 二级分区表 | Hash + Range / Hash + Range Columns / Hash + List / Hash + List Columns / Hash + Hash / Hash + Key | 不支持 | 不支持 |
| 二级分区表 | Key + Range / Key + Range Columns / Key + List / Key + List Columns / Key + Hash / Key + Key | 不支持 | 不支持 |
Truncate 一级分区
您可以 Truncate 分区表中的一级分区。 Truncate 一级分区的 SQL 语法如下:
ALTER TABLE table_name TRUNCATE PARTITION partition_name[, partition_name ...];
说明
Truncate 一级分区时,可以将一个或多个分区中的数据清空。
在 Truncate 一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。在
sys租户下,通过视图oceanbase.GV$OB_TRANSACTION_PARTICIPANTS查询当前还未结束的事务上下文状态。对于二级分区表,Truncate 一级分区时,会将一个或多个一级分区及其对应的二级分区中的数据全部清空。
部分示例如下:
清空一级分区表
tbl1_r中M202001和M202002分区中的数据。obclient> CREATE TABLE tbl1_r (log_id BIGINT NOT NULL,log_value VARCHAR(50),log_date TIMESTAMP NOT NULL) PARTITION BY RANGE(UNIX_TIMESTAMP(log_date)) (PARTITION M202001 VALUES LESS THAN(UNIX_TIMESTAMP('2020/02/01')) , PARTITION M202002 VALUES LESS THAN(UNIX_TIMESTAMP('2020/03/01')) , PARTITION M202003 VALUES LESS THAN(UNIX_TIMESTAMP('2020/04/01')) , PARTITION M202004 VALUES LESS THAN(UNIX_TIMESTAMP('2020/05/01')) , PARTITION M202005 VALUES LESS THAN(UNIX_TIMESTAMP('2020/06/01')) , PARTITION M202006 VALUES LESS THAN(UNIX_TIMESTAMP('2020/07/01')) , PARTITION M202007 VALUES LESS THAN(UNIX_TIMESTAMP('2020/08/01')) , PARTITION M202008 VALUES LESS THAN(UNIX_TIMESTAMP('2020/09/01')) , PARTITION M202009 VALUES LESS THAN(UNIX_TIMESTAMP('2020/10/01')) , PARTITION M202010 VALUES LESS THAN(UNIX_TIMESTAMP('2020/11/01')) , PARTITION M202011 VALUES LESS THAN(UNIX_TIMESTAMP('2020/12/01')) , PARTITION M202012 VALUES LESS THAN(UNIX_TIMESTAMP('2021/01/01')) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M202001,M202002; Query OK, 0 rows affected清空 Range Columns + List Columns 分区表
t_f_rclc的一级分区p0中的数据。
Truncate 二级分区
Truncate 二级分区的 SQL 语法如下:
ALTER TABLE table_name TRUNCATE SUBPARTITION subpartition_name[, subpartition_name ...];
说明
Truncate 二级分区表中的二级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。在
sys租户下,通过视图oceanbase.GV$OB_TRANSACTION_PARTICIPANTS查询当前还未结束的事务上下文状态。当 Truncate 多个二级分区时,这些二级分区必须属于同一个一级分区。
以清空 Range + Range 分区表 t_f_rr 的二级分区 sp1 和 sp2 中的数据为例,示例如下:
obclient> CREATE TABLE t_f_rr(col1 INT,col2 TIMESTAMP)
PARTITION BY RANGE(col1)
SUBPARTITION BY RANGE(UNIX_TIMESTAMP(col2))
(PARTITION p0 VALUES LESS THAN(100)
(SUBPARTITION sp0 VALUES LESS THAN(UNIX_TIMESTAMP('2021/04/01')),
SUBPARTITION sp1 VALUES LESS THAN(UNIX_TIMESTAMP('2021/07/01')),
SUBPARTITION sp2 VALUES LESS THAN(UNIX_TIMESTAMP('2021/10/01')),
SUBPARTITION sp3 VALUES LESS THAN(UNIX_TIMESTAMP('2022/01/01'))
),
PARTITION p1 VALUES LESS THAN(200)
(SUBPARTITION sp4 VALUES LESS THAN(UNIX_TIMESTAMP('2021/04/01')),
SUBPARTITION sp5 VALUES LESS THAN(UNIX_TIMESTAMP('2021/07/01')),
SUBPARTITION sp6 VALUES LESS THAN(UNIX_TIMESTAMP('2021/10/01')),
SUBPARTITION sp7 VALUES LESS THAN(UNIX_TIMESTAMP('2022/01/01'))
)
);
Query OK, 0 rows affected
obclient> ALTER TABLE t_f_rr TRUNCATE SUBPARTITION sp1,sp2;
Query OK, 0 rows affected