---
title: "Truncate 分区 - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: Truncate 分区 您可以根据业务需要，清空分区表中分区的数据，保留分区结构。 分区表对 Truncate 分区操作的支持情况 OceanBase 数据库的 Oracle 模式中： 对于一级分区表，当前仅支持对 Range 分区和 List 分区执行 Truncate 分区操作，暂不支持对 Hash 分区执行 T…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.3.5 LTS

# Truncate 分区

更新时间：2026-07-15 20:42:45

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/300.database-object-management/200.manage-object-of-oracle-mode/200.manage-partitions-of-oracle-mode/600.truncate-partition-of-oracle-mode.md)  

您可以根据业务需要，清空分区表中分区的数据，保留分区结构。

## 分区表对 Truncate 分区操作的支持情况

OceanBase 数据库的 Oracle 模式中：

- 对于一级分区表，当前仅支持对 Range 分区和 List 分区执行 Truncate 分区操作，暂不支持对 Hash 分区执行 Truncate 分区操作。
 - 对于二级分区表，当前仅支持对 Range/List 类型（组合）的分区执行 Truncate 分区操作。

OceanBase 数据库的 Oracle 模式中，一级分区表和二级分区表对 Truncate 分区操作的具体支持情况如下表所示。

| 分区表 | 分区类型 | Truncate 一级分区 | Truncate 二级分区 |
| --- | --- | --- | --- |
| 一级分区表 | Range / List | 支持 | - |
| 一级分区表 | Hash | 不支持 | - |
| 二级分区表 | Range + Range / Range + List | 支持 | 支持 |
| 二级分区表 | Range + Hash | 支持 | 不支持 |
| 二级分区表 | List + Range / List + List | 支持 | 支持 |
| 二级分区表 | List + Hash | 支持 | 不支持 |
| 二级分区表 | Hash + Range / Hash + List | 不支持 | 支持 |
| 二级分区表 | Hash + Hash | 不支持 | 不支持 |

## Truncate 分区操作说明

Truncate 分区时，请尽量保证待 Truncate 的分区上不存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。您可以在 `sys` 租户下，通过视图 `oceanbase.GV$OB_TRANSACTION_PARTICIPANTS` 查询当前还未结束的事务上下文状态。

### Truncate 分区对全局索引的影响

Oracle 模式下，对于有全局索引的一级或二级分区表，Truncate 分区时，需要通过在 `ALTER TABLE` 语句中添加 `UPDATE GLOBAL INDEXES` 关键字的方式来更新全局索引信息；如果未添加 `UPDATE GLOBAL INDEXES` 关键字，则 Truncate 分区后，该分区表上的全局索引会处于不可用状态。

对于 V4.3.5 版本，从 V4.3.5 BP2 版本开始对于使用 Range 或 List 分区（包括一级分区和二级分区）且支持 `TRUNCATE` 分区操作的表，当指定 `UPDATE GLOBAL INDEXES` 时，系统不会重建全局索引，而是通过后台合并删除数据的方式，以 lazy（延迟）维护策略保持索引有效，从而避免因索引失效导致的查询中断或性能下降。需要注意的是，该优化仅适用于普通全局索引。以下场景无法触发该优化：

- 一级分区为 Hash 分区（即使二级分区为 Range 或 List），此时对二级分区执行 Truncate 操作。
 - 分区键为表达式而非普通列。

#### 控制分区 DDL 时全局索引行为的隐藏配置项

对于 V4.3.5 版本，OceanBase 数据库从 V4.3.5 BP2 版本开始引入租户级隐藏配置项 `_ob_enable_truncate_partition_preserve_global_index`，用于控制是否允许在 `TRUNCATE`/`DROP` 主表分区（以下简称分区 DDL）时，全局索引不失效。对于升级上来的租户，该隐藏配置项默认值为 `False`，对于新建租户默认值为 `True`，取值行为对比如下：

| 配置项值 | 分区 DDL 执行期间的行为 | 分区 DDL 执行完成后的结果 |
| --- | --- | --- |
| True | 只有 `TRUNCATE`/`DROP` 的主表分区不允许 DML，主表的其他分区可以正常 DML。 | 全局索引不失效：主表和所有的索引表都可以执行 DML 操作，并且主表相关的全局索引不失效。 |
| False | 只有 `TRUNCATE`/`DROP` 的主表分区不允许 DML，主表的其他分区可以正常 DML。 | 全局索引失效：主表和所有的索引表都可以执行 DML 操作，主表相关的全局索引会失效或者重建。 |

**示例如下：**

- 索引维持。

  ```shell
  obclient> ALTER SYSTEM SET "_ob_enable_truncate_partition_preserve_global_index" = True;

  ```
 - 索引失效。

  ```shell
  obclient> ALTER SYSTEM SET "_ob_enable_truncate_partition_preserve_global_index" = False;

  ```

### Truncate 分区对并发 DDL/DML/查询 的影响

Truncate 分区属于 Offline DDL 操作。在 Truncate 分区时，OceanBase 数据库会在目标分区上加一个分区级别的排他锁。

| 操作类型 | 在 Truncate 分区执行期间的影响 |
| --- | --- |
| 并发 DDL | 被禁止或阻塞。针对同一张表的任何其他 DDL 操作都无法同时执行。 |
| 并发 DML | - 对目标分区：完全阻塞。 - 对其他分区：通常可并发，前提是语句能明确访问其他分区。 |
| 并发查询（`SELECT`） | 不受影响，可正常执行。 |

## Truncate 一级分区

您可以根据业务需要，Truncate 一级分区表或二级分区表中的一级分区。

### 语法

```sql
ALTER TABLE table_name TRUNCATE PARTITION partition_name_list [UPDATE GLOBAL INDEXES];

partition_name_list:
  partition_name [, partition_name ...]

```

#### 说明

- Truncate 一级分区时，支持将一个或多个分区中的数据清空。
 - Truncate 二级分区表中的一级分区时，会将该分区及其对应的二级分区中的数据全部清空。

### 示例

- 清空一级分区表 `tbl1_r` 中 `M202001` 和 `M202002` 分区的数据并更新全局索引信息。

  ```sql
  obclient> CREATE TABLE tbl1_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE)
         PARTITION BY RANGE(log_date)
          (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD'))
           , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD'))
           , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD'))
           , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD'))
           , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD'))
           , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD'))
           , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD'))
           , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD'))
           , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD'))
           , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD'))
           , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD'))
           , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD'))
           , PARTITION MMAX VALUES LESS THAN (MAXVALUE)
           );
  Query OK, 0 rows affected

  obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M202001,M202002 UPDATE GLOBAL INDEXES;
  Query OK, 0 rows affected

  ```
 - 清空 Range + List 分区的二级分区表 `t2_f_rl` 的一级分区 `p0` 和 `p1`。

  ```sql
  obclient> ALTER TABLE t2_f_rl TRUNCATE PARTITION p0,p1;

  ```

## Truncate 二级分区

您可以根据业务需要，Truncate 二级分区表中的二级分区。

### 语法

```sql
ALTER TABLE table_name TRUNCATE SUBPARTITION subpartition_name_list[ UPDATE GLOBAL INDEXES ];

subpartition_name_list:
  subpartition_name[, subpartition_name ...]

```

#### 说明

Truncate 二级分区时，支持将一个或多个二级分区中的数据全部清空。

### 示例

清空分区表 `t2_f_lr` 中一级分区 `p1` 下的二级分区 `sp3` 和 `sp4` 并更新全局索引信息。

```sql
obclient> CREATE TABLE t2_f_rl(col1 INT,col2 VARCHAR2(50))
       PARTITION BY RANGE(col1)
       SUBPARTITION BY LIST(col2)
       (PARTITION p0 VALUES LESS THAN(100)
         (SUBPARTITION sp0 VALUES('01'),
          SUBPARTITION sp1 VALUES('02')
          ),
        PARTITION p1 VALUES LESS THAN(200)
         (SUBPARTITION sp2 VALUES('01'),
          SUBPARTITION sp3 VALUES('02'),
          SUBPARTITION sp4 VALUES('03')
         )
        );
Query OK, 0 rows affected

obclient> ALTER TABLE t2_f_rl TRUNCATE SUBPARTITION sp3,sp4 UPDATE GLOBAL INDEXES;
Query OK, 0 rows affected

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
