---
title: 动态分区管理机制与使用指南-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于动态分区管理机制与使用指南相关的常见问题和使用技巧，帮助您快速解决动态分区管理机制与使用指南的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 动态分区管理机制与使用指南

更新时间：2026-07-07 13:01

适用版本： V4.3.x、V4.4.x 内容类型：TechNote  

## 总结说明

在按时间序列持续写入数据（如系统日志、交易流水）的场景下，OceanBase 允许表根据预设的动态分区策略（`DYNAMIC_PARTITION_POLICY`）自动预创建新分区并删除过期分区，从而实现时序数据的自动化生命周期管理与运维简化。

## 详细说明

### 概念定义与使用场景

动态分区管理是 OceanBase 内置的自动化分区维护特性，适用于日志、交易记录等按时间序列存储数据的场景。通过配置步长、预创建时间等策略，由后台 Job（`DBMS_SCHEDULER`）定期执行 DDL，自动补充未来分区并清理历史过期分区。

### 使用方法与核心参数

在建表或通过 `ALTER TABLE` 修改表时，可以指定 `DYNAMIC_PARTITION_POLICY` 块。具体语法与参数示例如下：

```sql
CREATE TABLE tbl1 (col1 DATETIME)
    DYNAMIC_PARTITION_POLICY(
        ENABLE = true,             -- 开启动态分区功能
        TIME_UNIT = 'hour',        -- 分区步长（hour/day/week/month/year），设定后不可改
        PRECREATE_TIME = '3 hour', -- 预建未来多长时间的分区，建议设大以防调度失败导致无分区可写
        EXPIRE_TIME = '1 day',     -- 分区过期时间，超过该时间的分区将被自动 DROP
        TIME_ZONE = '+8:00'        -- 依赖的时区信息，建议显式指定，设定后不可改
    )
    PARTITION BY RANGE COLUMNS (col1)(
        PARTITION P0 VALUES LESS THAN ('2026-01-15 18:10:00')
    );

```

普通表也可以通过 `ALTER TABLE tbl SET DYNAMIC_PARTITION_POLICY = (...)` 在线转为动态分区表，或设置 `ENABLE = false` 关闭该功能。

### 运行机制与内部表现

以配置了 `TIME_UNIT = 'hour'` 的表为例，其在系统中的运行表现如下：

- **调度触发机制**：并非实时触发。系统内置 `SCHEDULED_MANAGE_DYNAMIC_PARTITION_HOURLY`（整点调度）和 `SCHEDULED_MANAGE_DYNAMIC_PARTITION_DAILY`（每天 0 点调度）两个定时任务。刚建完表时分区不会立刻增加，需等待下一次调度或通过 `CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION();` 手动触发。
 - **历史断档修补表现**：若系统停机、人为禁用调度任务一段时间，或最大分区上界落后于当前时间，当调度重新触发时，系统会自动将断档的历史分区补全，其全过程会记录在成功列表内。
 - **Schema 变更异常表现**：若人为修改了分区键列的类型（例如将 `datetime` 强转为 `int`），导致表 Schema 不再满足动态分区限制，后续的调度任务会静默失败。手动调用管理包不报错，但查询历史记录视图（`DBA_OB_TENANT_EVENT_HISTORY`）时，该表的 ID 会出现在 `FAILED_TABLE_ID_LIST` 中，而不再预创建新分区。

### 监控视图

- **配置查询**：`oceanbase.DBA_OB_DYNAMIC_PARTITION_TABLES`（或 `V$` 动态性能视图）。
 - **调度历史查询**：`oceanbase.DBA_OB_TENANT_EVENT_HISTORY`（过滤 `EVENT = 'MANAGE_DYNAMIC_PARTITION'`），可查看成功和失败的表 ID（`SUCCESS_TABLE_ID_LIST` / `FAILED_TABLE_ID_LIST`）。

### 注意事项

- 删除过期分区属于 DROP 操作，会导致全局索引失效，带有全局索引的表需谨慎使用 `EXPIRE_TIME`。
 - 调度失败不会自动重试，建议 `PRECREATE_TIME` 尽量设置大一些（单次最多建 2048 个分区）。
 - 集群升级期间禁止 DDL，调度会暂停，升级前需提前人工预建足够的覆盖窗口分区。
 - 初期配置建议先不设置清理过期分区（即暂不配置 `EXPIRE_TIME`），以灰度策略观察预建功能稳定后再做清理。

## 适用版本

OBServer V4.3.5 BP2(oceanbase-4.3.5.2-102000162025051417) 及以上版本。

Previous

[OceanBase 产品版本生命周期](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001497334) ![有帮助](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) 咨询热线
