首批通过分布式安全可靠测评,为关键业务系统打造
手动触发分区均衡
更新时间:2026-03-23 13:12:19
除了配置定时分区均衡任务,也可以通过手动调用 DBMS_BALANCE 系统包中的 TRIGGER_PARTITION_BALANCE 子程序来触发一次分区均衡。
使用限制
仅用户租户支持手动触发分区均衡,sys 租户不支持手动触发分区均衡。
注意事项
当系统中正在进行其他均衡任务时,不能手动触发分区均衡任务,需要等待当前均衡任务完成后再执行手动触发分区均衡的操作。
sys 租户可以通过视图 CDB_OB_BALANCE_JOBS 查看指定租户是否有其他正在进行的均衡任务;用户租户可以通过 DBA_OB_BALANCE_JOBS 视图查看是否有正在进行的其他均衡任务。
手动触发分区均衡前,需要确认租户级配置项
enable_rebalance和enable_transfer的值均为True。如果其中任意一个配置项的值不为True,则手动触发分区均衡的命令将会执行失败。如果当前租户的分区已达到均衡,则系统会提示
partitions are already balanced, no need to trigger partition balance的错误信息。
手动触发一次分区均衡
租户管理员登录集群的 MySQL 租户或 Oracle 租户。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A调用
DBMS_BALANCE系统包中的TRIGGER_PARTITION_BALANCE子程序,触发一次分区均衡。MySQL 模式Oracle 模式MySQL 模式的语句如下:
CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout);其中,
balance_timeout用于控制后台分区均衡任务执行的超时时间,单位为秒。如果不指定该值,则表示后台分区均衡任务包括手动触发的和定时触发的分区均衡任务均无超时时间,一直执行,直到任务执行完成。示例如下:
触发一次分区均衡,且后台分区均衡任务无超时时间。
obclient [oceanbase]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE();触发一次分区均衡,且后台分区均衡任务的超时时间为 7200 秒。
obclient [oceanbase]> CALL DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200);
有关
DBMS_BALANCE系统包中TRIGGER_PARTITION_BALANCE子程序的详细介绍,参见 TRIGGER_PARTITION_BALANCE。Oracle 模式的语句如下:
BEGIN DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(balance_timeout); END;其中,
balance_timeout用于控制后台分区均衡任务执行的超时时间,单位为秒。如果不指定该值,则表示后台分区均衡任务包括手动触发的和定时触发的分区均衡任务均无超时时间,一直执行,直到任务执行完成。示例如下:
触发一次分区均衡,且后台分区均衡任务无超时时间。
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(); END;//obclient [SYS]> DELIMITER ;触发一次分区均衡,且后台分区均衡任务的超时时间为 7200 秒。
obclient [SYS]> DELIMITER //obclient [SYS]> BEGIN DBMS_BALANCE.TRIGGER_PARTITION_BALANCE(7200); END;//obclient [SYS]> DELIMITER ;
有关
DBMS_BALANCE系统包中TRIGGER_PARTITION_BALANCE子程序的详细介绍,参见 TRIGGER_PARTITION_BALANCE。
后续操作
手动触发分区均衡后,实际的分区转移将由后台均衡任务异步执行。用户可以通过视图查看分区均衡任务的执行过程,具体操作参见 查看后台的分区均衡任务。