我的一个PL / SQL存储过程出现了递归死锁。 我要说的是50分之一。 总是在同一行。
我检查了最常见的原因,例如在我的外键上建立了索引。
我知道它遇到死锁,因为此PL / SQL过程将DBMS_UTILITY.FORMAT_ERROR_STACK插入自定义日志表中。
以下是我的自定义日志表正在报告的内容
ORA-00060: deadlock detected while waiting for resource
ORA-06512: at "USER.PROC_NAME", line 554
显然,我应该能够获得更多详细信息,例如“死锁图”,以帮助我在oracle日志中找到原因。
我运行了以下命令以找出错误的记录位置(从V $ DIAG_INFO中选择*;)
它给了我以下信息
Diag Trace E:\ORACLE\diag\rdbms\bdes\bdes\trace
Diag Alert E:\ORACLE\diag\rdbms\bdes\bdes\alert
我去了那些文件夹,在警报文件夹的死锁时间内找不到任何东西。 在跟踪文件夹中,我的自定义日志比以前快了6秒钟,其中包含以下内容
Trace file E:\ORACLE\diag\rdbms\bdes\bdes\trace\bdes_ora_1476.trc
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label: RDBMS_12.2.0.1.0_WINDOWS.X64_170210.4
Windows NT Version V6.2
ORACLE_HOME = E:\oracle\product\12.2.0
Node name : *****
CPU : 8 - type 8664, 8 Physical Cores
Process Affinity : 0x0x0000000000000000
Memory (Avail/Total): Ph:14827M/32767M, Ph+PgF:19325M/37631M
VM name : VMWare Version (6)
Instance name: *****
Redo thread mounted by this instance: 1
Oracle process number: 23
Windows thread id: 1476, image: ORACLE.EXE (SHAD)
*** 2018-08-03T10:04:21.754777+02:00
下面什么都没有,我觉得我应该在这个线程中有类似问题的内容 How can I identify the rows involved in an Oracle deadlock?
我应该启用某些功能吗?我想念什么?
感谢您的时间,如果可以为您提供更多有用的信息,请告诉我。
答案 0 :(得分:0)
您能张贴554
行及其周围的USER.PROC_NAME
吗?分析程序源代码以了解问题所在就足够了。根据我的经验,死锁通常是使用触发器自动执行操作的结果...
答案 1 :(得分:0)
环顾四周后,我检查了此查询select di.value path, 'alert_' || i.instance_name || '.log' from v$diag_info di, v$instance i where di.name = 'Diag Trace'
返回的目录,该问题是由于磁盘上的空间不足所致。
谢谢您的帮助
(通过@ matthew-mcpeak查询)