【oracel死锁】ORA-00060: deadlock detected while waiting for resource
生产报错,oracel死锁
按顺序发生:
接口1:
update tabel where field in ('A','B','C');//批量update,接口无事务无其他db操作
此时事务未提交,接口2收到请求↓
接口2:
tabel where field ='A';
tabel where field ='C';
tabel where field ='B';
3条update在同一事务中,需要跑完全部逻辑再提交
分析:
接口1 更新A-成功,拿到B资源,发现C资源被占用, 等待C资源释放
接口2 更新A-成功,拿到资源C,发现B被占用,等待B释放
两者互等对方,造成死锁,报错ORA-00060: deadlock detected while waiting for resource, oracel自动放弃其一,
在这次案例中错误在接口1中被抛出释放了资源,故接口2处理成功,
在业务上来接口1能重试,没有造成严重生成事故 谢天谢地