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

OB数据库insert语句报错ORA-30006

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


OBproxy报错信息

2024-11-11 18:59:00.648385,CLUSTER_NAMEP,,,,CLUSTER_NAME:TENANT_NAME:US
ER_NAME,OB_ORACLE,TABLE_NAME,TABLE_NAME,COM_QUERY,INSERT,fai
led,30006,insert into TABLE_NAME%0A (%0A ID_%COLUMNS    )%0values%0A (%0
VALUES%2C,30203307us,16us,0us,30203222us,Y0-
7F921AE1A0D0,YB420AF9B807-000617C77D9D586A-0-
0,,,0,xxx.xxx.xxx.7:2881,ORA-30006resource busy; acquire 
with WAIT timeout expired,YB420AF9B807-000617C77D9D586A-0-0

查看insert操作表及外键引用主表表结构:



查看Observe日志

查看Observe日志有大量主表select for update操作:



测试主表select for update,子表insert操作情况

3.1 OB环境测试

测试总结:

OB环境主表select for update 相应值时,会阻塞外键表insert操作,锁超时后返回报错。

3.2 MySQL环境测试

测试总结:

MySQL环境默认开启自动提交主表select for update 不影响外键表insert操作;关闭自动提交后select for update相应值时,会阻塞外键表insert操作,锁超时后返回报错。

3.3 Oracle环境测试

测试总结:

Oracle环境主表select for update 相应值时,不会阻塞外键表insert操作;只有真正执行update主表操作时才会阻塞外键表insert操作。



总 结

OB对于父表 delete update 外键列时会直接在子表上 select for update 对应外键列的行;

同样的,对于子表 insert update 外键列时会直接在父表上 select for update 对应外键列的行。

这块逻辑上和Oracle会不一样导致报错,但对数据的安全性是没有影响的。与开发沟通后由业务侧调整业务逻辑或者删除外键解决。


END


本文作者:张 芳(上海新炬中北团队)

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

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

评论