首批通过分布式安全可靠测评,为关键业务系统打造
管理表组内的表
更新时间:2026-06-27 10:55:22
表加入到表组后,可以对表进行分区管理(例如,修改表的分区类型、分区个数、分区值、添加分区、删除分区等)、将表移出表组、将表迁移到其他表组等操作。
管理表的分区
表分区修改注意事项
在修改表分区后,数据分布可能会发生变化,进而可能导致资源分配不均衡的问题。因此,建议在修改表分区时,开启租户的分区均衡,以确保资源分配的优化与均衡。
有关数据负载均衡的信息,参见 数据负载均衡概述。
注意
- 在 OceanBase 数据库 V4.4.0 及之前版本升级至 V4.4.1 版本时:
- 定时分区均衡任务
SCHEDULED_TRIGGER_PARTITION_BALANCE默认关闭(enabled = 0)。 - 租户级配置项
partition_balance_schedule_interval的值保持不变,分区均衡任务还是依赖租户级配置项partition_balance_scheduler_interval控制,维持 V4.4.1 之前版本的行为。 - 用户开启定时任务
SCHEDULED_TRIGGER_PARTITION_BALANCE时校验partition_balance_schedule_interval = 0,否则报错OB_OP_NOT_ALLOW。
- 定时分区均衡任务
- 在 OceanBase 数据库 V4.4.1 版本新建的租户:
- 定时分区均衡任务
SCHEDULED_TRIGGER_PARTITION_BALANCE默认开启(enabled = 1)。 - 租户级配置项
partition_balance_schedule_interval默认为 0。分区均衡的触发完全依赖定时任务以及用户手动触发。有关定时任务以及用户手动触发均衡任务的信息,参见 配置定时分区均衡任务 和 手动触发分区均衡。 - 用户设置
partition_balance_schedule_interval时校验SCHEDULED_TRIGGER_PARTITION_BALANCE关闭,否则报错OB_OP_NOT_ALLOW。
- 定时分区均衡任务
表分区的修改规则
对表组内的表进行分区管理操作前,您可以先通过视图查看当前表所属表组的 SHARDING 属性、表组中存在哪些表以及表组内表的分区信息,详细操作可参见 查看表组信息。
再根据查询结果,如果表组内仅有当前这张表,则可以正常进行分区管理操作,不受限制。如果表组中除了当前表还有其他表,则需要遵循以下修改规则:
当该表所在的表组的
SHARDING属性为NONE时:如果该表为非分区表,则允许非分区表改为一级分区表或二级分区表。
如果该表为分区表,则允许一级分区表改为二级分区表,允许二级分区表改为一级分区表,同时也允许添加或删除分区,即分区类型、分区个数、分区值修改没有限制。
当该表所在的表组的
SHARDING属性为PARTITION时:如果该表为非分区表,则不允许将非分区表修改为分区表。
如果该表为分区表,则不允许将其修改为非分区表。
如果该表为一级分区表,则允许将其修改为二级分区表,并且二级分区表中的一级分区对应的分区类型、分区个数和分区值必须与表组内其他表保持一致,对二级分区表的分区类型、分区个数及分区值的定义没有限制。除了允许通过添加一级分区和删除一级分区的操作修改分区个数,不允许通过其他方式将一级分区的分区类型、分区个数、分区值修改为与表组内其他表不相同的值。
如果该表为二级分区表,则允许将其修改为一级分区表,且一级分区对应的分区类型、分区个数和分区值需要与表组内其他表的值保持一致。除了允许通过添加一级分区和删除一级分区的操作修改分区个数,不允许通过其他方式将一级分区的分区类型、分区个数、分区值修改为与表组内其他表不相同的值。
对于执行过添加或删除一级分区的表组,系统不会进行负载均衡,必须当表组内所有表的分区类型、分区个数、分区值等均满足
PARTITION的属性要求时,才会进行负载均衡。
当该表所在的表组的
SHARDING属性为ADAPTIVE时:如果该表为非分区表,则不允许将非分区表修改为分区表。
如果该表为分区表,则不允许将其修改为非分区表。
如果该表所在的表组内全是一级分区表,则不允许将该表修改为非分区表或二级分区表。同时,除了允许通过添加或删除一级分区的操作修改分区个数,不允许通过其他方式将表的分区类型、分区个数、分区值修改为与表组内其他表不相同的值。
如果该表所在的表组内全是二级分区表,则不允许将表修改为一级分区表。同时,除了允许通过添加或删除一级分区、添加或删除二级分区的操作修改分区个数,不允许通过其他方式将表的分区类型、分区个数、分区值修改为与表组内其他表不相同的值。
对于执行过添加或删除一级分区、添加或删除二级分区的表组,系统不会进行负载均衡,必须当表组内所有表的分区类型、分区个数、分区值等均满足
ADAPTIVE的属性要求时,才会进行负载均衡。
修改表的分区
根据当前表的实际情况结合修改规则,参考以下内容,进行表分区的修改。
将表移出表组
表加入到表组后,可以将表从表组中移出,SQL 语句如下。
ALTER TABLE table_name SET TABLEGROUP '';
下面通过一个简单的示例进行说明。
假设有一个表组
tblgroup1,且表组内包含tbl1和tbl2两个表。SHOW TABLEGROUPS WHERE tablegroup_name = 'tblgroup1';查询结果:
+-----------------+------------+---------------+----------+ | Tablegroup_name | Table_name | Database_name | Sharding | +-----------------+------------+---------------+----------+ | tblgroup1 | tbl1 | test | ADAPTIVE | | tblgroup1 | tbl2 | test | ADAPTIVE | +-----------------+------------+---------------+----------+ 2 rows in set将表
tbl1移出表组。ALTER TABLE tbl1 SET TABLEGROUP '';再次查看表组中的表。
SHOW TABLEGROUPS WHERE tablegroup_name = 'tblgroup1';查询结果:
+-----------------+------------+---------------+----------+ | Tablegroup_name | Table_name | Database_name | Sharding | +-----------------+------------+---------------+----------+ | tblgroup1 | tbl2 | test | ADAPTIVE | +-----------------+------------+---------------+----------+ 1 rows in set
将表迁移到其他表组
表加入到表组后,可以将表迁移到其他符合条件的表组中。
将表迁移到其他表组中时,需要查看目标表组的属性及表组内表的分区信息,以确认当前表是否满足加入表组的条件。查看表组信息的详细操作请参见 查看表组信息。
对于
SHARDING属性为NONE的表组,对待迁入的表没有任何限制,可以直接迁移到该表组。对于
SHARDING属性为PARTITION的表组,要求待迁入的表其对应的一级分区必须与表组中所有表的一级分区的分区定义一致,包括分区类型、分区个数、分区值。表组中可以同时有一级分区表和二级分区表。相同的分区定义具体指:
- 分区类型相同,例如,都是 Range 分区。
- 如果是 Hash 分区,要求引用的列数相同,并且分区个数相同。
- 如果是 Range 分区,要求引用的列数相同,分区数相同,Range 分割点也相同。
对于
SHARDING属性为ADAPTIVE的表组,要求待迁入的表其对应的一级分区和二级分区必须与表组中所有表的一级分区和二级分区的分区定义一致,包括分区类型、分区个数、分区值。表组中必须全是一级分区表或全是二级分区表。相同的分区定义具体指:
- 分区类型相同(例如,都是 Hash + Range 分区)。
- 如果是 Hash 分区,要求引用的列数相同,并且分区个数相同。
- 如果是 Range 分区,要求引用的列数相同,分区数相同,Range 分割点也相同。
- 对于二级分区,根据其分区类型,与一级分区的要求相同。
将表迁移到其他表组的 SQL 语句如下。
ALTER TABLE table_name SET TABLEGROUP tablegroup_name;
将表 tbl1 迁移至表组 tblgroup2 的示例如下:
ALTER TABLE tbl1 SET TABLEGROUP tblgroup2;