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 )%0A values%0A (%0A
VALUES%2C,30203307us,16us,0us,30203222us,Y0-
7F921AE1A0D0,YB420AF9B807-000617C77D9D586A-0-
0,,,0,xxx.xxx.xxx.7:2881,ORA-30006: resource 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会不一样导致报错,但对数据的安全性是没有影响的。与开发沟通后由业务侧调整业务逻辑或者删除外键解决。

本文作者:张 芳(上海新炬中北团队)
本文来源:“IT那活儿”公众号

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




