首批通过分布式安全可靠测评,为关键业务系统打造
合并报错 column checksum is not equal
更新时间:2024-01-22 01:56
在 OceanBase 数据库 V2.x 版本,将 int 类型修改为 bigint 类型之后,需要在数据合并后,才能对被修改字段类型创建索引,否则将导致合并报错 column checksum is not equal。本文探讨如何修复该问题。
适用版本
OceanBase 数据库 V2.x 版本。
问题现象
数据合并遇到报错 column checksum is not equal。
相应的 DDL 样例语句如下。
obclient> create table t1 (c1 int primary key, c2 int);
obclient> alter table t1 modify column c2 bigint;
obclient> alter table t1 add index idx_c2(c2);
问题原因
OceanBase 数据库 V2.x 版本的机制问题,源表修改字段类型后,其数据仍然为 int,但新建的索引却是 bigint,导致在内存计算中 checksum 不一致。
解决方法
在实际生产环境中,应当将上述操作中的创建索引挪到数据合并后。如果已经出现合并失败的问题,则可通过下述手段解决。
obclient> alter table t1 drop index idx_c2;
obclient> alter system clear merge error;
--等待这次合并正常结束
obclient> alter table t1 set progressive_merge_num=1;
--再次开启合并
obclient> alter table t1 set progressive_merge_num=0;
--正常创建这个 bigint 列的索引