暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase数据库DML执行异常

IT那活儿 2024-09-26
99

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!     



问题描述



接到业务跑批报错,数据库偶发异常,进行重试后恢复正常,具体报错信息如下:

  • SQL执行错误,当前SQL
insert into xxx select * from xxx
Java.sql.SQLTransientConnectionException:(conn=2958368) ORA-00600:internal error code,arguments:-4029Schema error

环境说明:
  • 版本:3.x   
  • 架构:X86  
  • 租户类型:Oracle



问题分析



2.1 查询官网
根据报错信息-4029,查询官方解释:
2.2 查询租户所在OB主机observer日志
根据4029搜索相关信息,发现有远程发送错误信息。
2.3 根据trace_id,查询其他副本OB主机的observer日志
发现有重试9次获取对象操作。
2.4 查询相关时间点
发现数据库有大量DDL操作,经与业务确认为业务批量作业。




定因及处理



3.1 问题结论

OceanBase数据库为分布式数据库,以分区为单位进行打散存储,业务进行大量DDL操作后,马上进行DML操作同一对象,如果DDL和DML操作在不同节点执行,短时间内DML操作会获取不到最新版本的对象DDL,数据库内部会自动进行9次重试获取操作。
如果9次仍未获取对象最新DDL状态,就会报-4012错误。

3.2 问题解决

1)建议业务DDL和DML同一对象时,中间间隔最少秒级别时间,等待数据库进行DDL状态同步
2)数据库版本进行升级至4.x版本
3)临时解决,业务进行重跑即可

END


本文作者:刘一刀(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论