---
title: OBServer major 合并超时-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OBServer major 合并超时相关的常见问题和使用技巧，帮助您快速解决 OBServer major 合并超时的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# OBServer major 合并超时

更新时间：2024-01-22 01:56

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

## 问题现象

创建无主键的有 LOB 列的分区表。

```sql
create table t("c0" NUMBER(12,0) NOT NULL, "c1" date default sysdate, "c2" CLOB, constraint "PK_LOG_0114" UNIQUE ("c0")) PARTITION BY RANGE ("c1") (PARTITION "p1" VALUES LESS THAN (TO_DATE(' 2021-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')), PARTITION "pother" VALUES LESS THAN (MAXVALUE));

```

写入足够大的 LOB 数据，同时分区键列为 NULL。

```sql
insert into t values(3, NULL, repeat('t', 2097152));

```

触发 major 转储，转储会一直无法完成，查看日志有 LOB writer 报错日志。

```sql
alter system major freeze;

```

## 问题原因

一个拥有分区键的无主键表，同时表中存在 `LOB` 列，而且分区键列可以为 `NULL`。在无主键表场景下，分区键列会作为 `Rowkey` 的一部分，而且分区键列允许为空的情况下，分区键列写入 `NULL`，同时 `LOB` 列写入足够大的数据触发 `LOB` 的 `outrow`，可稳定复现此问题 。 OceanBase 数据库 V3.X 版本的 `LOB` 在做 `major` 转储时，会对 `row` 中每列的 `rowkey` 进行强类型校验，这个校验由于没有规避 `is_null` 的逻辑，导致分区键列为 `NULL` 的情况下会报错，由于 `type` 为 `NULL`，不能满足 `type` 一致的校验，导致报错。

## 问题的风险及影响

特定场景下，导致 `major merge` 一直无法完成。

## 影响的版本

OceanBase 数据库 V3.X 所有版本。

## 解决方法及规避方式

建立一张定义完全一样的表，将原表数据导入，同时需要修改保证分区键列非空，然后 `drop` 原表，重新触发 `major freeze`。

上一篇

[租户 Locality 变更失败，合并超时](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000005)

下一篇

[合并超时，错误代码 4023](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000152) ![有帮助](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) 咨询热线
