首批通过分布式安全可靠测评,为关键业务系统打造
分区中间插入新分区后,SQL 执行报错 -4377
更新时间:2026-05-21 09:16
适用版本
OceanBase 数据库所有版本。
问题现象
对分区表增加分区后,执行 UPDATE、INSERT 时 SQL 报错 -4377。报错信息因检查出错的位置不同而变化,示例如下。
ORA-00600: internal error code, arguments: -4377, fatal internal error in [check_old_row_legitimacy]
ERROR 4377 (HY000): fatal internal error in [check_new_row_partition_validity]
问题原因
默认设置下,对 Range 分区的分区表添加分区只能添加在最后的位置,即新分区的范围要大于之前最大的分区。OceanBase 数据库的这个限制是为了保证分区内数据的一致性,避免新增分区后,有的分区中存在不属于该分区的数据。如果用户设置租户配置项 _enable_add_between_range_partitions = true,则可以在 Range 分区的分区表中间插入分区,需要用户来保证分区间数据的一致性,否则会出现该问题。
设置
_enable_add_between_range_partitions的方法:obclient> select * from __all_virtual_tenant_parameter_stat where name like "_enable_add_between_range_partitions";obclient> alter system set _enable_add_between_range_partitions = 'True' tenant='xxx';用户在中间插入分区必须确保满足以下条件:
- 做分区管理前,数据表中的数据跟要新增的分区不能存在交集。
- 做分区管理过程中,不能向数据表中插入属于新增分区的数据。
解决方法
纠正分区数据的不一致问题,关闭 _enable_add_between_range_partitions。