Oracle 脚本(或代码中的逻辑)导致死锁
下面您将看到在Oracle 11中导致锁定的存储过程。不幸的是,我所处的公司环境不允许我访问跟踪日志或基本上任何内容。所以我读了很多关于如何做到这一点的建议,然后哭着说我做不到。我不确定你是否能从下面判断这是罪魁祸首。无论如何,谢谢大家的时间Oracle 脚本(或代码中的逻辑)导致死锁,oracle,stored-procedures,deadlock,Oracle,Stored Procedures,Deadlock,下面您将看到在Oracle 11中导致锁定的存储过程。不幸的是,我所处的公司环境不允许我访问跟踪日志或基本上任何内容。所以我读了很多关于如何做到这一点的建议,然后哭着说我做不到。我不确定你是否能从下面判断这是罪魁祸首。无论如何,谢谢大家的时间 MERGE INTO my_owner.my_table tgtT USING (SELECT diTT, sisCd FROM my_owner.NGR_DMNSN_TYP where DMNSN_NM_TXT = 'myname'
MERGE INTO my_owner.my_table tgtT
USING (SELECT diTT, sisCd FROM my_owner.NGR_DMNSN_TYP
where DMNSN_NM_TXT = 'myname'
and sisCd = 'RefDB') srcT
ON ( TGTT.diTT = srcT.diTT and TGTT.ID_TXT = 50000 )
WHEN MATCHED
THEN UPDATE SET TGTT.DSCRPTN_TXT = 'dfdf', TGTT.NM_TXT = 'bldfdfah'
WHEN NOT MATCHED
THEN
INSERT (TGTT.DSCRPTN_TXT, TGTT.NM_TXT, TGTT.diTT, TGTT.ID_NBR, TGTT.ID_TXT)
VALUES ('ee', 'ee', srcT.diTT, 50000, '50000' );
死锁还是阻塞?当单个会话调用此过程时,或者当它同时从多个会话调用时,它是否会死锁?它是否可复制?如果您的DBA不提供您需要调查的信息,那么他们将不得不自己进行调查……我不确定merge语句本身如何导致死锁,但您可以立即做的一件事是将合并拆分为
insert
和update
。你没有使用update语句中的数据,因此没有必要进行merge
。我应该提供一些好问题和信息。是的,它是可复制的,它是一个死锁,并且它是单个会话。谢谢Alex.Haki,我们最初在插入/更新中使用了它,这就是导致我们在它死锁后尝试合并的原因。我可以尝试一种新的方法。这个应用程序不是多线程的,所以我很难相信它是在代码方面的。谢谢Haki。我修复了布局,还更改了存储过程以显示其实际使用情况。