首批通过分布式安全可靠测评,为关键业务系统打造
管理表组内的表
更新时间:2026-04-10 11:58:36
表加入到表组后,可以对表进行分区管理(例如,修改表的分区类型、分区个数、分区值、添加分区、删除分区等)、将表移出表组、将表迁移到其他表组等操作。
管理表的分区
表分区修改注意事项
在修改表分区时,如果需要使用租户的分区自动均衡能力,需要开启租户内的负载均衡,并设置分区负载均衡任务生成的时间间隔。租户的分区自动均衡由以下两个配置项控制:
租户级配置项
enable_rebalance该配置项在系统租户下用于控制是否进行租户间的负载均衡;用户租户下用于控制是否进行租户内均衡。其默认值为
true,配置项修改后立即生效。对于系统租户下配置项
enable_rebalance的值:true:表示开启租户间的负载均衡。false:表示关闭租户间的负载均衡。
对于用户租户下配置项
enable_rebalance的值:true:表示开启租户内的负载均衡。在修改表分区前,建议开启租户内的负载均衡。false:表示关闭租户内的负载均衡。
租户级配置项
PARTITION_BALANCE_SCHEDULE_INTERVAL该配置项用于控制生成分区负载均衡任务的时间间隔。表示当
enable_rebalance的值为true时,系统会将partition_balance_schedule_interval作为时间间隔来自动触发分区负载均衡任务。默认值为2h,取值范围为 [0s, +∞),0s表示关闭分区均衡,配置项修改后立即生效。
两个配置项的设置方法如下:
使用管理员用户登录集群的
sys租户或用户租户。开启租户内的负载均衡。
系统租户开启指定租户的租户内负载均衡
ALTER SYSTEM SET enable_rebalance = true TENANT = 'tenant_name';该语句仅将用户租户下配置项
enable_rebalance的值设置为true。示例:
ALTER SYSTEM SET enable_rebalance = true TENANT = 'oracle';系统租户开启所有用户租户的租户内负载均衡
ALTER SYSTEM SET enable_rebalance = true TENANT = all_user;或者
ALTER SYSTEM SET enable_rebalance = true TENANT = all;该语句表示用户租户下配置项
enable_rebalance的值均为true。说明
OceanBase 数据库从 V4.2.1 版本开始,
TENANT = all_user与TENANT = all语义相同,在需要生效范围为所有用户租户时,推荐使用TENANT = all_user,后续TENANT = all将废弃不再使用。用户租户开启本租户的租户内负载均衡
Oracle 租户开启本租户的租户内负载均衡的语句如下:
ALTER SYSTEM SET enable_rebalance = 'true';
设置分区负载均衡任务生成的时间间隔。
系统租户
ALTER SYSTEM SET partition_balance_schedule_interval='2h' TENANT = 'tenant_name';示例:
ALTER SYSTEM SET partition_balance_schedule_interval='2h' TENANT = 'oracle';用户租户
ALTER SYSTEM SET partition_balance_schedule_interval='2h';
表分区的修改规则
对表组内的表进行分区管理操作前,您可以先通过视图查看当前表所属表组的 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 | SYS | ADAPTIVE | | TBLGROUP1 | TBL2 | SYS | 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 | SYS | ADAPTIVE | +-----------------+------------+---------------+----------+ 1 row in set
将表迁移到其他表组
表加入到表组后,可以将表迁移到其他符合条件的表组中。
将表迁移到其他表组中时,需要查看目标表组的属性及表组内表的分区信息,以确认当前表是否满足加入表组的条件。查看表组信息的详细操作请参见 查看表组信息。
根据表组的 SHARDING 属性:
对于
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;