首批通过分布式安全可靠测评,为关键业务系统打造
分区表更新错误,错误代码 1235
更新时间:2026-05-21 09:16
本文介绍在分区表上执行更新语句时报 1235 错误的处理方法。
影响版本
OceanBase 数据库 V2.X 及以后的版本。
问题现象
在分区表上执行更新语句时出错,错误信息如下。
CREATE TABLE t1(c1 int primary key, c2 varchar(10))PARTITION BY range(c1)(PARTITION p0 VALUES less than(6), PARTITION p1 VALUES less than(Maxvalue) );
INSERT INTO t1 VALUES(1, '11111'),(2, '22222'),(3, '33333'),(4, '44444'), (5,'55555'),(6, '66666'),(7, '77777'),(8, '88888');
UPDATE t1 SET c1 = 11 WHERE c1 = 1;
ERROR 1235 (0A000): uncertain plan violating external consistency not supported
可能原因
对于普通租户,可能是由于没有开启 GTS(Global TimeStamp,全局时间戳),可用以下语句查看。
obclient> SHOW VARIABLES LIKE 'ob_timestamp_service';更新分区表时,必须开启 GTS。
说明
由于 UPDATE 语句是强一致性请求,而关闭 GTS 后 OceanBase 数据库无法提供跨多台机器的一致性读取版本而被拒绝。
对于系统租户,系统租户没有 GTS 概念,因此在 sys 租户中执行以上操作无论是否开启 GTS 都会发生错误。因此建议您切换到普通用户中重新执行以上 SQL。
说明
系统租户的 GTS leader 是
all_core_table的leader,普通租户的 GTS leader 是各个租户默认创建的__all_dummy表的 leader。系统租户需要访问all_core_table的leader 信息,如果开启 GTS 则可能发生错误。
解决方式
登录普通租户,并开启 GTS。开启 GTS 的语句如下。
obclient> SET GLOBAL ob_timestamp_service='GTS';