HGDB 4.5.8.8开启oracle兼容执行带聚合函数的SQL导致数据库进程被信号11杀死

文章目录

环境

系统平台:银河麒麟 (海光)

版本:4.5.8

症状

数据库版本:瀚高安全版4.5.8.8

介质包:hgdb-see-4.5.8.8-3937-efc2bbd-20241016.x86_64.rpm

信号11的报错信息:

2025-06-16 10:23:04.890 CST,1857,681b3d37.741,370,2025-05-07 19:00:07 CST,0,LOG,00000,"server process (PID 656071) was terminated by signal 11: Segmentation fault","Failed process was running:xxx查询SQL

报错SQL:

sql 复制代码
1)非聚合字段不在group by中的SQL
SELECT t1.id
	,t1.v
	,t1.v1
	,count(t1.id) AS num
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t1.v1 IS NOT NULL;
2)group by中包含所有非聚合字段,但是order by字段不在group by中的SQL
SELECT t1.id
	,t1.v
	,t1.v1
	,count(t1.id) AS num
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t1.v1 IS NOT NULL
GROUP BY t1.id
	,t1.v
	,t1.v1
ORDER BY t2.id;

问题原因

数据库开启oracle兼容后group by、order by相关语法与oracle仍有区别,使用oracle兼容的分支会引起信号11导致数据库服务异常。

解决方案

1、临时解决方案:

1)非聚合字段不在group by中的SQL,要把非聚合字段都添加到group by中。

修改后的SQL:

sql 复制代码
SELECT t1.id
	,t1.v
	,t1.v1
	,count(t1.id) AS num
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t1.v1 IS NOT NULL
GROUP BY t1.id
	,t1.v
	,t1.v1;

2)group by中包含所有非聚合字段,但是order by字段不在group by中的SQL,要把order by中不在group by中的字段删除,按需改成group by中的字段。

修改后的SQL:

sql 复制代码
SELECT t1.id
	,t1.v
	,t1.v1
	,count(t1.id) AS num
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t1.v1 IS NOT NULL
GROUP BY t1.id
	,t1.v
	,t1.v1
ORDER BY t1.id; --t2.id改成了t1.id

2、永久解决方案

申请补丁包或者升级数据库版本。

相关推荐
xixingzhe2几秒前
MySQL 锁表故障排查与处理
数据库·mysql
真上帝的左手19 分钟前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
为思念酝酿的痛25 分钟前
MySQL表的连接
数据库·mysql
数字新视界1 小时前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
bksczm1 小时前
MySQL之存储引擎
数据库·mysql
大模型最新论文速读2 小时前
text-to-sql:从学术玩具到生产落地
数据库·sql
ManageEngineITSM2 小时前
工单分类怎么设计?类别、子类别与自动分派的实用方法
大数据·服务器·数据库·人工智能·分类·数据挖掘
ClouGence3 小时前
MongoDB 双向同步如何防止数据循环?(附实操指南)
数据库·mongodb
TDengine (老段)3 小时前
TDengine IDMP 十大实用功能(7)
数据库·物联网·时序数据库·tdengine·涛思数据·工业数据·idmp
Decay__3 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构