---
title: "配置定时分区均衡任务 - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: 配置定时分区均衡任务 OceanBase 数据库在创建用户租户时，系统内置了定时分区均衡任务 SCHEDULED_TRIGGER_PARTITION_BALANCE ，默认每日的 00:00 触发一次分区均衡。用户可以通过 DBMS_SCHEDULER 系统包的子程序来设置定时分区均衡任务的各项参数。 使用限制 系统…
---
切换语言

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

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

# 配置定时分区均衡任务

更新时间：2026-04-08 18:11:13

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/600.manage/350.load-balancing-manage/600.partition-balance-management/100.configure-a-scheduled-partition-balancing-task.md)  

OceanBase 数据库在创建用户租户时，系统内置了定时分区均衡任务 `SCHEDULED_TRIGGER_PARTITION_BALANCE`，默认每日的 00:00 触发一次分区均衡。用户可以通过 `DBMS_SCHEDULER` 系统包的子程序来设置定时分区均衡任务的各项参数。

## 使用限制

系统租户（sys 租户）下不支持配置定时分区均衡任务。

## 开启定时分区均衡任务

对于当前版本新建的用户租户，默认定时分区均衡任务即为开启状态，不需要再重新启用。对于从 V4.2.3 及之前版本升级至当前版本的用户租户，默认定时分区均衡任务为关闭状态，用户可以参考以下操作开启定时分区均衡任务。

1. 租户管理员登录集群的 MySQL 租户或 Oracle 租户。

   连接示例如下，连接数据库时以实际环境为准。

   ```shell
   obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A

   ```
 2. 确认租户级配置项 `partition_balance_schedule_interval` 的值是否为 `0s`。

   开启定时分区均衡任务 `SCHEDULED_TRIGGER_PARTITION_BALANCE` 前，需要确保未开启自动触发分区均衡任务，即要求租户级配置项 `partition_balance_schedule_interval` 的值为 `0`。

   查看租户级配置项 `partition_balance_schedule_interval` 是否为 `0s`，如果不为 `0s`，将其值设置为 `0s`，语句如下。

   ```shell
   obclient> SHOW PARAMETERS LIKE '%partition_balance_schedule_interval%';

   ```

   ```shell
   obclient> ALTER SYSTEM SET partition_balance_schedule_interval='0s';

   ```
 3. 调用 `DBMS_SCHEDULER` 系统包的 `ENABLE` 子程序，启用定时分区均衡任务 `SCHEDULED_TRIGGER_PARTITION_BALANCE`。

       MySQL 模式   Oracle 模式

   MySQL 模式租户启用定时分区均衡任务的示例如下：

   ```shell
   obclient [oceanbase]> CALL DBMS_SCHEDULER.ENABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');

   ```

   Oracle 模式租户启用定时分区均衡任务的示例如下：

   ```shell
   obclient [SYS]> DELIMITER //

   ```

   ```shell
   obclient [SYS]> BEGIN
        DBMS_SCHEDULER.ENABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');
   END;//

   ```

   ```shell
   obclient [SYS]> DELIMITER ;

   ```

   有关 `ENABLE` 子程序的详细说明，参见 [ENABLE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479962)。

## 关闭定时分区均衡任务

对于当前版本新建的用户租户，默认定时分区均衡任务即为开启状态，用户也可以根据业务需要，禁用定时分区均衡任务。禁用定时分区均衡任务后，用户还可以通过自动触发（将配置项 `partition_balance_schedule_interval` 设置为大于 `0s` 的值）或手动触发方式来发起分区均衡任务。

   ```
 2. 调用 `DBMS_SCHEDULER` 系统包的 `DISABLE` 子程序，禁用定时分区均衡任务 `SCHEDULED_TRIGGER_PARTITION_BALANCE`。

   MySQL 模式租户禁用定时分区均衡任务的示例如下：

   ```shell
   obclient [oceanbase]> CALL DBMS_SCHEDULER.DISABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');

   ```

   Oracle 模式租户禁用定时分区均衡任务的示例如下：

   ```

   ```shell
   obclient [SYS]> BEGIN
        DBMS_SCHEDULER.DISABLE('SCHEDULED_TRIGGER_PARTITION_BALANCE');
   END;//

   ```

   ```

   有关 `DISABLE` 子程序的详细说明，参见 [DISABLE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479970)。

## 调整定时分区均衡任务的调度时间

开启定时分区均衡任务后，系统默认在每天的 00:00 触发分区均衡，用户可以根据需要进行修改。

   ```
 2. 调用 `DBMS_SCHEDULER` 系统包的 `SET_ATTRIBUTE` 子程序，调整分区均衡任务的下次调度时间。例如，调整为下次 01:00 触发分区均衡。

   MySQL 模式租户将定时分区均衡任务的执行时间调整为 `2024-06-12 01:00:00` 的示例如下:

   ```shell
   obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'NEXT_DATE', '2024-06-12 01:00:00');

   ```

   Oracle 模式租户将定时分区均衡任务的执行时间调整为 `12-Jun-2024 01:00:00` 的示例如下：

   ```

   ```shell
   obclient [SYS]> BEGIN
        DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'NEXT_DATE', '12-Jun-2024 01:00:00');
   END;//

   ```

   ```

   有关 `SET_ATTRIBUTE` 子程序的详细说明，参见 [SET_ATTRIBUTE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004479961)。

## 调整定时分区均衡任务的调度频率

默认定时分区均衡任务的调度频率为一天一次，用户可以根据需要进行修改。

   ```
 2. 调用 `DBMS_SCHEDULER` 系统包的 `SET_ATTRIBUTE` 子程序，调整分区均衡任务的调度频率。例如，调整为每两天触发一次分区均衡。

   语句如下：

   ```sql
   CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=str_value; INTERVAL=int_value');

   ```

   其中：

      - `FREQ`：用于指定调度频率的时间单位，支持的取值为 `MINUTELY`（分钟）、`HOURLY`（小时）、`DAILY`（天）以及 `WEEKLY`（周）。
      - `INTERVAL`：用于指定具体数值，即每多少个单位时间触发一次任务。例如，`FREQ=DAILY; INTERVAL=2` 表示每两天触发一次任务。

   MySQL 模式租户将定时分区均衡任务的执行频率调整为每两天触发一次的示例如下:

   ```shell
   obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=DAILY; INTERVAL=2');

   ```

   语句如下：

   ```sql
   BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=str_value; INTERVAL=int_value');
   END;

   ```

   其中：

   Oracle 模式租户将定时分区均衡任务的执行频率调整为每两天触发一次的示例如下：

   ```

   ```shell
   obclient [SYS]> BEGIN
        DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'REPEAT_INTERVAL', 'FREQ=DAILY; INTERVAL=2');
   END;//

   ```

   ```

## 调整定时分区均衡任务单次任务执行的超时时间

默认定时分区均衡任务单次任务的执行无超时时间限制，用户需要根据业务实际情况进行修改。

由于调整定时分区均衡任务单次任务执行的超时时间实际上调整的是所有通过调用 `TRIGGER_PARTITION_BALANCE` 子程序而触发的后台分区均衡任务的执行超时时间，故调整该值同时也会影响通过手动方式触发的分区均衡任务。有关手动触发分区均衡的详细操作，参见 [手动触发分区均衡任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476016)。

   ```
 2. 调用 `DBMS_SCHEDULER` 系统包的 `SET_ATTRIBUTE` 子程序，调整单次任务执行的超时时间。

   语句如下：

   ```sql
   CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout)');

   ```

   其中，`balance_timeout` 用于指定单次任务执行的超时时间，单位为秒。如果该值为空，则表示后台均衡任务无超时时间。

   MySQL 模式租户将单次任务执行的超时时间调整为 7200 秒的示例如下:

   ```shell
   obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200)');

   ```

   语句如下：

   ```sql
   BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout)');
   END;

   ```

   Oracle 模式租户将单次任务执行的超时时间调整为 7200 秒的示例如下：

   ```

   ```shell
   obclient [SYS]> BEGIN
        DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'JOB_ACTION', 'DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200)');
   END;//

   ```

   ```

## 调整触发分区均衡语句的最大执行时间

默认触发分区均衡语句的最大执行时间为 7200 秒，即 2 小时，不建议修改该值。

   ```
 2. 调用 `DBMS_SCHEDULER` 系统包的 `SET_ATTRIBUTE` 子程序，调整触发分区均衡语句的最大执行时间。

   语句如下：

   ```sql
   CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', 'max_time');

   ```

   其中，`max_time` 用于指定触发分区均衡语句的最大执行时间，单位为秒。

   MySQL 模式租户将分区均衡语句的最大执行时间调整为 3600 秒（1小时）的示例如下:

   ```shell
   obclient [oceanbase]> CALL DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', '3600');

   ```

   语句如下：

   ```sql
   BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', 'max_time');
   END;

   ```

   Oracle 模式租户将分区均衡语句的最大执行时间调整为 3600 秒（1小时）的示例如下：

   ```

   ```shell
   obclient [SYS]> BEGIN
        DBMS_SCHEDULER.SET_ATTRIBUTE('SCHEDULED_TRIGGER_PARTITION_BALANCE', 'MAX_RUN_DURATION', '3600');
   END;//

   ```

   ```

## 后续操作

定时任务仅用于触发分区均衡任务，当达到触发条件时系统会自动触发分区均衡任务。触发分区均衡任务后：

- 可以通过视图查看定时分区均衡任务的触发历史，具体操作参见 [查看定时分区均衡任务的触发历史](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476020)。
 - 实际的分区转移将由后台均衡任务异步执行，可以通过视图查看分区均衡任务的执行过程，具体操作参见 [查看后台的分区均衡任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476017)。

  #### 说明

  成功触发分区均衡任务后，如果租户级配置项 `enable_rebalance` 和 `enable_transfer` 的值有一个不为 `True`，则该定时任务会执行失败。

## 相关文档

- [查看定时分区均衡任务相关配置](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476021)
 - [手动触发分区均衡任务](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004476016)

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