---
title: "管理一级分区表 | OceanBase 文档中心"
description: 管理一级分区表 分区表创建成功后，您可以对一级分区表进行添加、删除或 Truncate 操作。 各类型分区支持操作情况 分区类型 添加一级分区 删除一级分区 Truncate 一级分区数据 Range 分区 支持 支持 支持 List 分区 支持 支持 支持 Hash 分区 不支持 不支持 不支持 添加一级分区 语法…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

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

# 管理一级分区表

更新时间：2023-07-18 17:25:59

分区表创建成功后，您可以对一级分区表进行添加、删除或 Truncate 操作。

## 各类型分区支持操作情况

| 分区类型 | 添加一级分区 | 删除一级分区 | Truncate 一级分区数据 |
| --- | --- | --- | --- |
| Range 分区 | 支持 | 支持 | 支持 |
| List 分区 | 支持 | 支持 | 支持 |
| Hash 分区 | 不支持 | 不支持 | 不支持 |

## 添加一级分区

### 语法

```sql
ALTER TABLE table_name ADD partition_option;

partition_option:
  range_partition_option | list_partition_option

range_partition_option:
  PARTITION partition_name VALUES LESS THAN partition_expr

list_partition_option:
  PARTITION partition_name VALUES partition_expr

```

> **说明**
>
>  
>
> - 对于 Range 分区，只能在最大的分区之后添加一个分区，不可以在中间某个或者开始的地方添加。如果当前的分区中有 `MAXVALUE` 的分区，则不能继续添加分区。
>  - List 分区添加一级分区时，要求添加的分区与之前的分区不冲突。如果一个 List 分区有默认分区即 `Default Partition`，则不能添加任何分区。
>  - 在 Range/List 分区中添加一级分区不会影响全局索引和局部索引的使用。

### 示例

- 向 Range 分区中添加一级分区。创建 Range 分区表 `tbl1_r`，并添加分区 `M202006`。

  ```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'))
  );
  Query OK, 0 rows affected

  obclient> ALTER TABLE tbl1_r ADD PARTITION
         M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD'));
  Query OK, 0 rows affected

  ```
 - 向 List 分区中添加一级分区。创建 List 分区表 `tbl1_l`，并添加分区 `p4`。

  ```sql
  obclient> CREATE TABLE tbl1_l(log_id INT,log_value VARCHAR2(20))
         PARTITION BY LIST(log_value)
          (PARTITION p1 VALUES ('A'),
           PARTITION p2 VALUES ( 'B' ),
           PARTITION p3 VALUES ( 'C' )
          );
  Query OK, 0 rows affected

  obclient> ALTER TABLE tbl1_l ADD PARTITION p4 VALUES('D');
  Query OK, 0 rows affected

  ```

## 删除一级分区

### 语法

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

partition_name_list:
  partition_name [, partition_name ...]

```

> **说明**
>
>  
>
> - 删除一级分区时，可以删除一个或多个分区，但不能删除全部分区。
>  - 删除一级分区时，请尽量避免该分区上存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。
>  - 删除分区时，会同时删除分区中的数据，如果只需要删除数据，则可以使用 `TRUNCATE` 语句。
>  - 对于 Oracle 模式下有全局索引的一级分区表，删除一级分区时，需要在 `ALTER TABLE` 语句中添加 `UPDATE GLOBAL INDEXES` 关键字的方式来更新全局索引信息。如果未添加 `UPDATE GLOBAL INDEXES` 关键字，则删除分区后，该分区表上的全局索引将会处于不可用状态。

### 示例

删除一级分区表 `tbl1_r` 中的 `M202005` 和 `M202006`。

```sql
obclient> ALTER TABLE tbl1_r DROP PARTITION M202005,M202006;
Query OK, 0 rows affected

```

## Truncate 一级分区

### 语法

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

```

> **说明**
>
>  
>
> - Truncate 一级分区时，可以将一个或多个分区中的数据清空。
>  - 在 Truncate 一级分区时，请尽量避免该分区上存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。
>  - 对于 Oracle 模式下有全局索引的一级分区表，Truncate 分区时，需要在 `ALTER TABLE` 语句中添加 `UPDATE GLOBAL INDEXES` 关键字的方式来更新全局索引信息。如果未添加 `UPDATE GLOBAL INDEXES` 关键字，则 Truncate 分区后，该分区表上的全局索引将会处于不可用状态。

### 示例

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

```sql
obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M202001,M202002 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) 咨询热线
