首批通过分布式安全可靠测评,为关键业务系统打造
INSERT ALL 报错 -4024, Buffer not enough
更新时间:2026-05-28 02:06
适用版本
OceanBase 数据库 V3.x 版本。
问题描述
SQL 脚本导入 OceanBase 数据库 Oracle 模式报错。
ORA-00600: internal error code, arguments: -4024, Buffer not enough
对应表结构。
CREATE TABLE "xx" (
"ID" NUMBER(11) NOT NULL ,
"UID" VARCHAR2(50) NOT NULL ,
"SN" VARCHAR2(50) NOT NULL ,
"PC" VARCHAR2(20),
"EC" VARCHAR2(20),
"CC" VARCHAR2(20),
"VF" VARCHAR2(1),
"FSF" VARCHAR2(1),
"VFO" VARCHAR2(1),
"FSFO" VARCHAR2(1),
CONSTRAINT "hga" PRIMARY KEY ("ID")
) ;
对应的批量 SQL 脚本如下。
INSERT ALL
INTO xx VALUES (299, '1300003100325247', '30015857', '50', '501', '501', '1', '0', '1', null)
INTO xx VALUES (300, '1300003100325249', '30015858', '50', '501', '501', '1', '0', '1', null)
......
SELECT * FROM DUAL;
最终执行到 600 多行报错。
问题原因
INSERT ALL 是把列作为 alias 列实现的,也即所有 row 的 column 数会累加在一起。而 OceanBase 数据库不同版本下,一个表的最大列数是有限制的。
- V3.1.x 有列不能超过 512+64*2 = 640 的限制。
- OceanBase 数据库 V3.2.x 最大不能超过 4096+128 列。
- 在最新的 OceanBase 数据库 V4.x 版本上 INSERT ALL 不再受制于最大列数的限制。
解决方法
通过修改 SQL 来解决此问题,暂时有两种方法:
- 把 insert all into 中的行数变小。
- 使用 insert into table values 替代。