首批通过分布式安全可靠测评,为关键业务系统打造
在全文索引的表上执行 DML 报正确性问题 -4337
更新时间:2026-07-24 10:01
问题现象
在对包含全文索引 (fulltext index) 的表(分区)进行 DML 操作时,会出现正确性相关问题,报错 -4377。
执行 DML 操作,报错 -4377。
obclient > DELETE FROM xxxx WHERE id=xxxxx;返回结果如下。
4377 - fatal internal error in [check_delete_index_xxxxx]日志中的报错。
WARN [SQL.EXE] sync_fetch_local_result (ob_mini_task_executor.cpp:373) [47324][2306][xxxx-xxxx] [lt=3] [dc=0] open root op failed(ret=-4377) INFO [SHARE.PT] ob_partition_location_cache.cpp:750 [46410][758][xxxxx-xxxxx] [lt=15] [dc=0] batch_renew_location_with_sql success(ret=0, cnt=1) WARN [SQL.EXE] sync_fetch_local_result (ob_mini_task_executor.cpp:387) [47324][2306][xxxxx-xxxxx] [lt=4] [dc=0] get next row failed(ret=-4377) WARN [SQL.EXE] mini_task_local_execute (ob_mini_task_executor.cpp:423) [47324][2306][xxxxx-xxxxx] [lt=3] [dc=0] sync fetch local result(ret=-4377) WARN [SQL.EXE] mini_task_execute (ob_mini_task_executor.cpp:494) [47324][2306][xxxxx-xxxxx] [lt=3] [dc=0] fail to do mini task local execute(ret=-4377) WARN [SQL.EXE] execute (ob_mini_task_executor.cpp:459) [47324][2306][xxxxx-xxxxxx] [lt=6] [dc=0] mini task execute failed(ret=-4377, task_location={server:"xx.xx.xx.xx:xxxx", ob_task_id:{ob_job_id:{ob_execution_id:{server:"0.0.0.0", execution_id:xxxxxx, hash:xxxxxx}, job_id:xxxxx}, task_id:0, task_cnt:0}}) WARN [SQL.ENG] inner_open (ob_multi_part_delete.cpp:98) [47324][2306][xxxxxx-xxxxx] [lt=10] [dc=0] execute multi table dml task failed(ret=-4377) WARN [SQL.ENG] open (ob_phy_operator.cpp:160) [47324][2306][xxxxx-xxxxxx] [lt=4] [dc=0] Open this operator failed(ret=-4377, op_id=0, op_type="PHY_MULTI_PART_DELETE") WARN [SQL.ENG] open (ob_phy_operator.cpp:181) [47324][2306][xxxxxx-xxxxxx] [lt=4] [dc=0] fail to process error(ret=-4377) WARN [SQL.EXE] open (ob_execute_result.cpp:50) [47324][2306][xxxxxx-xxxxxx] [lt=2] [dc=0] root op fail to open(ret=-4377) WARN [SQL] open (ob_result_set.cpp:201) [47324][2306][xxxxxx-xxxxxx] [lt=5] [dc=0] fail open main query(ret=-4377) WARN [SQL.SESSION] sync_open (ob_result_set.cpp:145) [47324][2306][xxxxx-xxxxxx] [lt=5] [dc=0] fail to exec open()(ret=-4377) WARN [SERVER] response_result (ob_async_plan_driver.cpp:54) [47324][2306][xxxxx-xxxxxx] [lt=6] [dc=0] failed to do result set open(ret=-4377) WARN [SERVER] test_and_save_retry_state (ob_query_retry_ctrl.cpp:531) [47324][2306][xxxxx-xxxxx] [lt=3] [dc=0] do not need retry(client_ret=-4377, err=-4377, expected_stmt=true, THIS_WORKER.get_timeout_ts()=1658304822933666, retry_type_=0, result.get_stmt_type()=4, result.get_exec_context().need_change_timeout_ret()=false, session->get_retry_info().get_last_query_retry_err()=0) INFO [SERVER] ob_query_retry_ctrl.cpp:557 [47324][2306][xxxxxx-xxxxxx] [lt=9] [dc=0] check if need retry(client_ret=-4377, err=-4377, retry_type_=0, retry_times=1, multi_stmt_item=查询表结构发现全文索引。
obclient > show create table xxxx; CREATE TABLE `xxxx` ( `id` bigint(64) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `xxx_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据插入时填入, 更新时也要更新', `work_xxxx_id` varchar(1024) DEFAULT '' COMMENT '工作组ID', `xx_id` varchar(512) NOT NULL DEFAULT '' COMMENT '任务id', `work_xxxx_distribute_status_cd` varchar(1) DEFAULT '0' COMMENT '派发状态', `task_xxxx_attribute` varchar(1) DEFAULT NULL COMMENT '任务相关属性', PRIMARY KEY (`id`, `xx_id`), FULLTEXT KEY `work_xxxx_id` (`work_xxxx_id`) CTXCAT(`work_xxxx_id`) WITH PARSER 'XXX_ZZZ' BLOCK_SIZE 16384, KEY `idx_xxx_modified` (`xxx_modified`) BLOCK_SIZE 16384 GLOBAL, KEY `idx_xx_id` (`xx_id`) BLOCK_SIZE 16384 GLOBAL ) AUTO_INCREMENT = 14020090 DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.0' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 COMMENT = '工作量记录表' partition by key(xx_id) (partition p0, partition p1, partition p2, partition p3, partition p4, partition p5, partition p6) ;
问题原因
当在有全文索引的相关列上执行 DML 操作时因正确性校验检查会报错误码 4377。
问题的风险及影响
在全文索引的相关列上进行 DML 操作会出现正确性校验检查相关问题。
影响的版本
OceanBase 数据库企业版 V2.x、V3.x 版本。
解决方法及规避方式
解决方法
删掉表上存在的全文索引。
DROP INDEX fulltext_name ON table_name;
规避方式
请勿在 OceanBase 数据库 V2.x、V3.x 版本上创建和使用全文索引。