Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 脚本(或代码中的逻辑)导致死锁_Oracle_Stored Procedures_Deadlock - Fatal编程技术网

Oracle 脚本(或代码中的逻辑)导致死锁

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'

下面您将看到在Oracle 11中导致锁定的存储过程。不幸的是,我所处的公司环境不允许我访问跟踪日志或基本上任何内容。所以我读了很多关于如何做到这一点的建议,然后哭着说我做不到。我不确定你是否能从下面判断这是罪魁祸首。无论如何,谢谢大家的时间

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。我修复了布局,还更改了存储过程以显示其实际使用情况。