---
title: minor merge 过程中丢列最终导致副本间 checksum error-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于minor merge 过程中丢列最终导致副本间 checksum error相关的常见问题和使用技巧，帮助您快速解决minor merge 过程中丢列最终导致副本间 checksum error的难题。
---
切换语言

- 简体中文
- English

划线反馈

# minor merge 过程中丢列最终导致副本间 checksum error

更新时间：2026-06-15 09:16

适用版本： V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

### 背景介绍

#### checksum 问题

在合并时，会检测多副本的数据一致性，是通过对比多副本的宏块二进制检验值（data checksum）和列校验值（column checksum），以此保证多副本的数据是一致的。

当出现数据 checksum 问题时，需要结合 `Major SSTable` 宏块内容找到不一致行，再倒推不一致行的来源，可能需要追溯若干次 `minor`/`mini compaction`，甚至要查看事务 clog，才能找到问题的根源，并且需要保证所有 compaction 输出的数据及日志都没有被回收。需要环境留存信息完整，并且排查操作复杂、难度大。

checksum 问题出现可能和以下场景有关：

- compaction 执行过程中的问题（本问题）。
 - 事务在多副本的处理不一致等情况。

#### 本问题背景

本问题导致 checksum 问题的原因是 compaction 执行过程中的问题。

每个 SSTable 中每个 Rowkey 按照升序排列，每个 Rowkey 可能存在多个行，数据行分布如下：

- 未提交行：当事务没有提交时，行在 SSTable 中为未提交的形式。
 - Compact 行：包含这个 SSTable 中该 Rowkey 所有已提交行的结果。
 - 多版本行：每个事务对该 Rowkey 做出的修改。

在执行 minor merge 的时候，每个 SSTable 会按顺序迭代出行，不同 SSTable 若存在相同 Rowkey 的行，需要合在一起，并遵守：不同 SSTable 的 Compact 行需要将较旧的行合到较新的行，去填充较新行的空值列。

### 问题场景

在 minor merge 的时候，有如下分布的两个 SSTable：

| SSTable A（Base SSTable） | SSTable B |
| --- | --- |
| MACRO 1 | Rowkey 未提交行 | Macro 3 | Rowkey 行 |
| MACRO 2 | Rowkey Magic Row |  | |

1）minor merge 的时候，多个 SSTable 有同一个 Rowkey 的行。

2）该 Rowkey 的行跨宏块。

- 第一个宏块的行是未提交行。
 - 第二个宏块有事务回滚形成的 Magic row。

在 minor merge 的时候，若多个sstable拥有同一个 Rowkey，会把每个 SSTable 输出的 compact row 进行 fuse，生成目的 SSTable 的 compact row（这个 compact row 应该包含所有入参 SSTable 的行信息）

在这次出问题的 minor merge 中，由于 SSTable A 中输出的行 row_1 没有打上 compact 标，导致 SSTable B 中相同 Rowkey 的 compact 行 row_2 没有与 row_1 进行 fuse，导致最终的 compact 行丢失了 row_1 的信息。从而导致这个列信息丢失。

### 可能出现该问题的场景

- 对同一个 Rowkey 的变更比较多。
 - 有回滚事务。

## 关键诊断信息

### 事前巡检

无，尽快升级到带 fix 的版本。

### 事后诊断

**需要满足如下条件：**

1. 不一致的 Rowkey 为丢失部分列信息。
 2. 不一致的列信息是在 minor merge 中丢失。
 3. minor merge 中入参 SSTable 需要满足本问题的数据分布。

才能推断出是本问题，比较复杂，需要结合 `Major SSTable`/`minor SSTable` 的宏块数据分布来综合判断。

## 问题原因

内核 BUG。

## 问题的风险及影响

副本间 checksum 不一致。

## 影响租户

影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户，对于 SYS 租户无影响。

## 影响版本

OceanBase 数据库 V3.1.2 GA（oceanbase-3.1.2-20210618150922）及之后版本、V3.2.3 GA（oceanbase-3.2.3.0-20220418212020）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本。

## 解决方法

- 升级到问题已修复版本。目前已修复的版本包含 OceanBase 数据库 V3.2.3 BP9 Hotfix3（oceanbase-3.2.3.3-109030012023111713）、V3.2.3 BP9 Hotfix4（oceanbase-3.2.3.3-109040012024071014）、V3.2.3 BP11（oceanbase-3.2.3.3-111000032024070822）及之后版本、V3.2.4 BP7（oceanbase-3.2.4.7-107000012023113010）及之后版本。
 - 按照数据不一致的方式解决：删副本、删表等。

## 规避方式

无。

Previous

[合并错误，错误代码 4103](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000083)

Next

[数据的 collation type 不一致导致合并报 -4016](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000422800) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
