---
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

# 管理一级分区表

更新时间：2025-08-12 16:36:06

分区表创建成功后，您可以对一级分区表进行添加、删除或 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`，并添加分区 `M197006`。

  ```sql
  CREATE TABLE tbl1_r(
    log_id NUMBER,
    log_date DATE NOT NULL DEFAULT SYSDATE
  ) PARTITION BY RANGE(log_date) (
    PARTITION M197001
    VALUES
      LESS THAN(TO_DATE('1970/02/01', 'YYYY/MM/DD')),
      PARTITION M197002
    VALUES
      LESS THAN(TO_DATE('1970/03/01', 'YYYY/MM/DD')),
      PARTITION M197003
    VALUES
      LESS THAN(TO_DATE('1970/04/01', 'YYYY/MM/DD')),
      PARTITION M197004
    VALUES
      LESS THAN(TO_DATE('1970/05/01', 'YYYY/MM/DD')),
      PARTITION M197005
    VALUES
      LESS THAN(TO_DATE('1970/06/01', 'YYYY/MM/DD'))
  );

  ```

  在 `tbl1_r` 表中添加分区 `M197106`。

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

  ```

  在 `tbl1_r` 表中查看已添加的分区 `M197106`。

  ```sql
  obclient> SHOW CREATE TABLE tbl1_r\G
  *************************** 1. row ***************************
         TABLE: TBL1_R
  CREATE TABLE: CREATE TABLE "TBL1_R" (
    "LOG_ID" NUMBER,
    "LOG_DATE" DATE DEFAULT sysdate CONSTRAINT "TBL1_R_OBNOTNULL_1650855716241488" NOT NULL ENABLE
  ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
   partition by range(log_date)
  (partition M197001 values less than (TO_DATE(' 1970-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition M197002 values less than (TO_DATE(' 1970-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition M197003 values less than (TO_DATE(' 1970-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition M197004 values less than (TO_DATE(' 1970-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition M197005 values less than (TO_DATE(' 1970-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  partition M197006 values less than (TO_DATE(' 1970-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')))
  1 row in set

  ```

  向 `tbl1_r` 表的 `M197106` 分区插入数据。

  ```unknow
  obclient> INSERT INTO tbl1_r VALUES (1,date'1970-06-02');
  Query OK, 1 row affected

  ```

  查看数据落入的 `M197106` 分区。

  ```unknow
  obclient> SELECT * FROM tbl1_r partition(M197006);
  +--------+-----------+
  | LOG_ID | LOG_DATE  |
  +--------+-----------+
  |      1 | 02-JUN-70 |
  +--------+-----------+
  1 row in set

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

  ```sql
   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' )
          );

  ```

  在 `tbl1_l` 表中添加分区 `p4`。

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

  ```

  在 `tbl1_l` 表中查看已添加的分区 `p4`。

  ```sql
  obclient> SHOW CREATE TABLE tbl1_l\G
  *************************** 1. row ***************************
         TABLE: TBL1_L
  CREATE TABLE: CREATE TABLE "TBL1_L" (
    "LOG_ID" NUMBER(38),
    "LOG_VALUE" VARCHAR2(20)
  ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
   partition by list(log_value)
  (partition P1 values  ('A'),
  partition P2 values  ('B'),
  partition P3 values  ('C'),
  partition P4 values  ('D'))
  1 row in set

  ```

  向 `tbl1_l` 表的 `p4` 分区插入数据。

  ```unknow
  obclient> INSERT INTO tbl1_l VALUES(8,'A');
  Query OK, 1 row affected

  ```

  查看数据落入的 `p2` 与 `p3` 分区。

  ```unknow
  obclient> SELECT * FROM tbl1_l partition(p1);
  +--------+-----------+
  | LOG_ID | LOG_VALUE |
  +--------+-----------+
  |      8 | A         |
  +--------+-----------+
  1 row in set

  ```

## 删除一级分区

### 语法

```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` 关键字，则删除分区后，该分区表上的全局索引会处于不可用状态。
>  - 删除一级分区时，可以删除一个或多个分区，但不能删除全部分区。
>  - 删除一级分区时，请尽量避免该分区上存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。

### 示例

删除一级分区表 `tbl1_r` 中的 `M197105` 和 `M197106`。

1. 查看 `tbl1_r` 分区表。

   ```unknow
   obclient> SHOW CREATE TABLE tbl1_r\G
   *************************** 1. row ***************************
          TABLE: TBL1_R
   CREATE TABLE: CREATE TABLE "TBL1_R" (
     "LOG_ID" NUMBER,
     "LOG_DATE" DATE DEFAULT sysdate CONSTRAINT "TBL1_R_OBNOTNULL_1650855716241488" NOT NULL ENABLE
   ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
    partition by range(log_date)
   (partition M197001 values less than (TO_DATE(' 1970-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197002 values less than (TO_DATE(' 1970-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197003 values less than (TO_DATE(' 1970-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197004 values less than (TO_DATE(' 1970-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197005 values less than (TO_DATE(' 1970-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197006 values less than (TO_DATE(' 1970-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')))
   1 row in set

   ```
 2. 删除一级分区表 `tbl1_r` 中的 `M197105` 和 `M197106`。

   ```unknow
   obclient> ALTER TABLE tbl1_r DROP PARTITION M197105,M197106;
   Query OK, 0 rows affected

   ```
 3. 查看运行结果。

   ```unknow
   obclient>SHOW CREATE TABLE tbl1_r\G
   *************************** 1. row ***************************
          TABLE: TBL1_R
   CREATE TABLE: CREATE TABLE "TBL1_R" (
     "LOG_ID" NUMBER,
     "LOG_DATE" DATE DEFAULT sysdate CONSTRAINT "TBL1_R_OBNOTNULL_1650855716241488" NOT NULL ENABLE
   ) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
    partition by range(log_date)
   (partition M197001 values less than (TO_DATE(' 1970-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197002 values less than (TO_DATE(' 1970-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197003 values less than (TO_DATE(' 1970-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
   partition M197004 values less than (TO_DATE(' 1970-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')))
   1 row in set

   ```

## 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 分区后，该分区表上的全局索引会处于不可用状态。
>  - Truncate 一级分区时，可以将一个或多个分区中的数据清空。
>  - 在 Truncate 一级分区时，请尽量避免该分区上存在活动的事务或查询，否则可能会导致 SQL 语句报错，或者出现一些异常情况。

### 示例

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

```unknow
obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M197001,M197002 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) 咨询热线
