首批通过分布式安全可靠测评,为关键业务系统打造
清除分区权重
更新时间:2026-04-30 19:06:39
设置分区权重后,因业务需要,可以清除原来设置的分区权重。
使用限制
仅用户租户支持手动清除分区权重,系统租户不支持手动清除分区权重。
清除表级分区权重是将所有分区上设置的表级权重删除。如果该表设置过分区级权重,则系统会保留分区级权重。
MySQL 模式下清除分区权重
用户登录集群的 MySQL 租户。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql001#obdemo -p***** -A获取表的分区权重信息。
obclient(root@mysql001)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_OBJECT_BALANCE_WEIGHT;查询结果如下:
+----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ | TABLE_ID | PARTITION_ID | SUBPARTITION_ID | WEIGHT | DATABASE_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | TABLEGROUP_NAME | DATABASE_ID | TABLEGROUP_ID | OBJECT_ID | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ | 500002 | NULL | NULL | 1 | test | tbl1_h | NULL | NULL | NULL | 500001 | NULL | 500002 | | 500002 | 500003 | NULL | 2 | test | tbl1_h | p0 | NULL | NULL | 500001 | NULL | 500003 | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ 2 rows in set清除表的分区权重。
清除表级权重
清除表
tbl1_h的分区权重,语句如下。obclient(root@mysql001)[test]> CALL DBMS_BALANCE.CLEAR_BALANCE_WEIGHT('test','tbl1_h');清除一级分区级权重
清除表
tbl1_h中一级分区p0的分区权重,语句如下。obclient(root@mysql001)[test]> CALL DBMS_BALANCE.CLEAR_BALANCE_WEIGHT('test','tbl1_h','p0');
Oracle 模式下清除分区权重
用户登录集群的 Oracle 租户。
连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -usys@oracle001#obdemo -p***** -A获取表的分区权重信息。
obclient(SYS@oracle001)[SYS]> SELECT * FROM SYS.DBA_OB_OBJECT_BALANCE_WEIGHT;查询结果的示例如下:
+----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ | TABLE_ID | PARTITION_ID | SUBPARTITION_ID | WEIGHT | DATABASE_NAME | TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME | TABLEGROUP_NAME | DATABASE_ID | TABLEGROUP_ID | OBJECT_ID | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ | 500002 | NULL | NULL | 1 | SYS | TBL1_H | NULL | NULL | NULL | 201006 | NULL | 500002 | | 500002 | 500003 | NULL | 2 | SYS | TBL1_H | P0 | NULL | NULL | 201006 | NULL | 500003 | +----------+--------------+-----------------+--------+---------------+------------+----------------+-------------------+-----------------+-------------+---------------+-----------+ 2 rows in set清除表的分区权重。
清除表级权重
清除表
TBL1_H的分区权重,语句如下。obclient(SYS@oracle001)[SYS]> delimiter //obclient(SYS@oracle001)[SYS]> BEGIN DBMS_BALANCE.CLEAR_BALANCE_WEIGHT('SYS','TBL1_H'); END;//obclient(SYS@oracle001)[SYS]> delimiter ;清除一级分区级权重
清除表
TBL1_H中一级分区P0的分区权重,语句如下。obclient(SYS@oracle001)[SYS]> delimiter //obclient(SYS@oracle001)[SYS]> BEGIN DBMS_BALANCE.CLEAR_BALANCE_WEIGHT('SYS','TBL1_H','P0'); END;//obclient(SYS@oracle001)[SYS]> delimiter ;
后续操作
清除分区权重后,表上的分区分布可能会不均衡,如果期望尽快达到分区均衡,可以调用 DBMS_BALANCE.TRIGGER_PARTITION_BALANCE 子程序,手动触发一次分区均衡,有关手动触发分区均衡的详细操作,参见手动触发分区均衡。
或者,也可以等待定时分区均衡任务的触发。有关定时分区均衡任务的相关信息,参见 配置定时分区均衡任务。