注册
insert报错”大字段数据不完整";实例日志告警"A empty data buffer was send to set lob data!!!"
专栏/技术分享/ 文章详情 /

insert报错”大字段数据不完整";实例日志告警"A empty data buffer was send to set lob data!!!"

干煸牛蛙 2026/04/24 22 0 0
摘要

问题背景: 两个环境,同一条sql,一个执行成功,一个报错"大字段数据不完整";实例日志中有告警

2026-04-17 16:36:32.332 [WARNING] database P0000752153 T0000000000000070311 A empty data buffer was send to set lob data!!! Table: TPPF_DZXY, Dest lob now len: 21811
INSERT INTO ppf.tppf_dzxy (ID,XYMC,ZT,BBH,SJY,NRGS,XYNR,XYSCFS,XYLXDM) SELECT PPF.SEQ_TPPF_DZXY.NEXTVAL, a.name AS xymc, '2' AS zt, a.VERSION AS bbh, '' AS sjy, '2' AS nrgs, a.CONTENT AS xynr, '1' AS xyscfs, a.CONTRACT_NO AS xylxdm FROM ppfhis.econtract_dict a -- 【关键修复】NOT IN 改为 NOT EXISTS,避开 DISTINCT + 大字段问题 WHERE NOT EXISTS ( SELECT 1 FROM ppfhis.econtract_signed b JOIN ppfhis.econtract_signed_msg c ON b.ID = c.SIGNED_ID WHERE b.ECONTRACT_NO = a.CONTRACT_NO ) -- 【关键修复】用 ROWID 去重,替代 GROUP BY,避开大字段分组 AND ROWID IN ( SELECT MAX(ROWID) FROM ppfhis.econtract_dict GROUP BY name, VERSION, CONTRACT_NO ); SQL> desc ppfhis.econtract_dict 行号 NAME TYPE$ NULLABLE ---------- ----------- ----------------- -------- 1 ID INTEGER N 2 CONTRACT_NO VARCHAR(10 CHAR) Y 3 NAME VARCHAR(255 CHAR) Y 4 CONTENT CLOB Y 5 DIGEST VARCHAR(32 CHAR) Y 6 TYPE INTEGER Y 7 VERSION INTEGER Y 8 DIGITAL INTEGER Y SQL> desc ppf.tppf_dzxy 行号 NAME TYPE$ NULLABLE ---------- -------- ------------ -------- 1 ID DEC(16) N 2 XYMC VARCHAR(180) Y 3 XYFL DEC(12) Y 4 XYLX DEC(16) Y 5 ZT DEC(12) Y 6 BBH VARCHAR(20) Y 7 FILEPATH VARCHAR(100) Y 8 RDCS CLOB Y 9 SJY CLOB Y 10 CS_DATA CLOB Y 11 YYCL VARCHAR(300) Y 行号 NAME TYPE$ NULLABLE ---------- ------ ------------ -------- 12 NRGS DEC(12) Y 13 XYNR CLOB Y 14 MD5 VARCHAR(256) Y 15 CZR DEC(12) Y 16 CZRQ DEC(8) Y 17 CZSJ CHAR(10) Y 18 SYFW DEC(12) Y 19 XYSCFS DEC(12) Y 20 SFDJCA SMALLINT Y 21 DYFS DEC(12) Y 22 SCDM VARCHAR(32) Y 行号 NAME TYPE$ NULLABLE ---------- ------ ------------- -------- 23 XYLXDM VARCHAR(100) Y 24 ISBCXY SMALLINT Y 25 FID DEC(16) Y 26 RDQMWZ CLOB Y 27 SXRQ DEC(8) Y 28 JZRQ DEC(8) Y 29 BCXYSM VARCHAR(1000) Y 30 YXLX DEC(12) Y 31 YDMS DEC(10) Y 32 CDN VARCHAR(256) Y 33 BGRQ DEC(8) Y 行号 NAME TYPE$ NULLABLE ---------- ------------ ------------ -------- 34 CPBH VARCHAR(30) Y 35 GSBH VARCHAR(30) Y 36 CPFW DEC(12) Y 37 MBBBH VARCHAR(20) Y 38 YDDD DEC(12) Y 39 MSMBSC DEC(12) Y 40 SYURL VARCHAR(256) Y 41 IMGSYURL VARCHAR(256) Y 42 IMGLISTCOUNT DEC(22) Y 43 SYFLAG DEC(12) Y 44 CLFLAG DEC(12, 6) Y 行号 NAME TYPE$ NULLABLE ---------- ------- ------- -------- 45 TXYFLAG DEC(12) Y

思路:

  1. 搜索告警关键字,没有找到类似问题记录
  2. 注释sql中的ppf.tppf_dzxy.XYNRppfhis.econtract_dict.CONTENT后可以执行成功,锁定报错字段
  3. sql末尾加上limit关键字,尝试插入部分记录,可以执行成功;怀疑报错和某行记录有关
  4. 二分法找到一条导致报错的记录,计算长度,并尝试插入更长的记录,成功插入;排除存储限制问题
  5. 单独复制大字段内容粘贴插入,成功;怀疑数据页损坏,尝试导入导出表后恢复正常
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服