---
title: "创建动态分区表 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 创建动态分区表 OceanBase 数据库通过 DYNAMIC_PARTITION_POLICY 块，在建表时指定表的动态分区管理属性。 本文将向您介绍如何使用 SQL 语句创建动态分区表。 使用限制及注意事项 当前版本创建动态分区表需要至少指定一个分区定义。 仅支持 Range Columns 分区和 Range …
---
切换语言

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

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

# 创建动态分区表

更新时间：2026-04-01 16:41:39

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/300.database-object-management/100.manage-object-of-mysql-mode/300.manage-partitions-of-mysql-mode/260.dynamic-partition-of-mysql-mode/200.create-a-dynamic-partition-table-of-mysql-mode.md)  

OceanBase 数据库通过 `DYNAMIC_PARTITION_POLICY` 块，在建表时指定表的动态分区管理属性。

本文将向您介绍如何使用 SQL 语句创建动态分区表。

## 使用限制及注意事项

- 当前版本创建动态分区表需要至少指定一个分区定义。
 - 仅支持 Range Columns 分区和 Range 分区：

     - Range Columns 分区：分区键为 `date`、`datetime`、`timestamp`、`year`、`bigint`（指定 `BIGINT_PRECISION` 精度）类型的分区表可开启动态分区管理。
     - Range 分区：分区键为 `year`、`bigint`（指定 `BIGINT_PRECISION` 精度）类型的分区表可开启动态分区管理。
 - 仅能对一级分区表和二级分区表的一级分区开启动态分区管理。
 - 建表后预创建分区和删除过期分区的动作不会立刻执行，需要等待下一次动态分区管理任务自动调度，或者手动调度一次动态分区管理任务。调度动态分区管理任务的详细介绍，参见 [动态分区管理任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479325)。

## 权限要求

创建动态分区表需要有 `CREATE` 权限。更多有关 OceanBase 数据库权限的详细介绍，参见 [MySQL 模式下的权限分类](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479241)。

## 语法

创建动态分区表的 SQL 语句格式如下：

```sql
CREATE TABLE [IF NOT EXISTS] table_name (table_definition_list)
    DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list)
    partition_option;

dynamic_partition_policy_list:
    dynamic_partition_policy_option [, dynamic_partition_policy_option ...]

dynamic_partition_policy_option:
    ENABLE = {true | false}
    | TIME_UNIT = {'hour' | 'day' | 'week' | 'month' | 'year'}
    | PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
    | EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
    | TIME_ZONE = {'default' | 'time_zone'}
    | BIGINT_PRECISION = {'none' | 'us' | 'ms' | 's'}

```

## 动态分区管理属性参数说明

| **属性名称** | **描述** | **是否必填** | **是否可修改** |
| --- | --- | --- | --- |
| ENABLE | 表示是否启用动态分区管理。取值如下：   - `true`：默认值，表示启用动态分区管理。 - `false`：表示禁用动态分区管理。 | 否 | 是 |
| TIME_UNIT | 表示分区的时间单位，即自动创建分区边界的间隔。取值如下：   - `hour`：按小时划分分区。 - `day`：按天划分分区。 - `week`：按周（星期）划分分区。 - `month`：按月划分分区。 - `year`：按年划分分区。 | 是 | 否 |
| PRECREATE_TIME | 表示预创建时间。调度一次动态分区管理，会预创建分区使得 **最大分区上界 > now() + precreate_time**。取值如下：   - `-1`：默认值，表示不预创建分区。 - `0`：表示仅预创建当前分区。 - `n {hour \\| day \\| week \\| month \\| year}`：表示预创建对应时间跨度的分区。例如，`3 hour` 表示预创建 3 小时内的分区。    #### 说明    - 需要预创建多个分区时，分区边界的间隔为 `TIME_UNIT`。 - 首个预创建的分区边界为现存最大分区边界按 `TIME_UNIT` 向上取整。 | 否 | 是 |
| EXPIRE_TIME | 表示分区过期时间。调度一次动态分区管理，会删除所有 **分区上界 < now() - expire_time** 的过期分区。取值如下：   - `-1`：默认值，表示分区永不过期。 - `0`：表示除当前分区外，之前的所有分区均过期。 - `n {hour \\| day \\| week \\| month \\| year}`：表示分区过期时间。例如，`1 day` 表示分区过期时间为 1 天。 | 否 | 是 |
| TIME_ZONE | 表示判断当前时间与时间类型（`date`、`datetime`、`year` 类型）分区键大小时，依赖的时区信息。取值如下：   - `default`：默认值，表示不额外配置时区，使用租户时区。除上述类型外，其他类型 `time_zone` 字段必须为 `default`。 - `time_zone`：表示自定义时区偏移值。例如，`+8:00` 等时区偏移值。 | 否 | 否 |
| BIGINT_PRECISION | 表示 `bigint` 类型分区键的时间戳精度。取值如下：   - `none`：默认值，表示无精度（分区键不为 `bigint` 类型）。 - `us`：微秒精度。 - `ms`：毫秒精度。 - `s`：秒精度。 | 否 | 否 |

更多有关创建表语法的详细参数说明信息，参见 [CREATE TABLE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479546)。

### 动态分区参数限制

- `TIME_UNIT`：分区键为 `date` 类型时，参数 `TIME_UNIT` 不能使用 `hour`；分区键为 `year` 类型时，参数 `TIME_UNIT` 仅能使用 `year`。
 - `PRECREATE_TIME`：最多预创建 2048 个分区。
 - `TIME_ZONE`：分区键为 `date`、`datetime` 或 `year` 类型时，参数 `TIME_ZONE` 才可以指定自定义时区偏移值，其他类型只能为 `default`。
 - `BIGINT_PRECISION`：只有分区键类型为 `bigint` 时，才可以指定该参数值为 `us`、`ms`、`s`，其他分区键类型时该参数值只能为 `none`。
 - `TIME_UNIT`、`TIME_ZONE`、`BIGINT_PRECISION` 指定后不能修改。

## 示例

创建动态分区表 `test_tbl1`，设置动态分区属性为：

- 分区边界按每小时划分。
 - 预创建当前时间之后的 3 小时内的分区。
 - 删除分区上界早于当前时间 1 天前的分区。
 - 使用北京时间（UTC+8）判断时间，确保分区边界和过期逻辑基于该时区。
 - 分区键 `col2` 是 `DATETIME` 类型，无需配置 `bigint` 的时间戳精度。

```sql
CREATE TABLE test_tbl1 (col1 INT, col2 DATETIME)
    DYNAMIC_PARTITION_POLICY(
        ENABLE = true,
        TIME_UNIT = 'hour',
        PRECREATE_TIME = '3 hour',
        EXPIRE_TIME = '1 day',
        TIME_ZONE = '+8:00',
        BIGINT_PRECISION = 'none'
    )
    PARTITION BY RANGE COLUMNS (col2)(
        PARTITION P0 VALUES LESS THAN ('2025-04-15 13:30:00')
    );

```

#### 说明

建表后预创建分区和删除过期分区的动作不会立刻执行，需要等待下一次动态分区管理任务自动调度，或者手动调度一次动态分区管理任务。详细介绍，参见 [动态分区管理任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479325)。

## 相关文档

- [动态分区概述](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479328)
 - [查看动态分区表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479329)
 - [修改动态分区表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479326)
 - [动态分区管理任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479325)

 上一篇 下一篇 ![有帮助](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) 咨询热线
