Oracle:发生死锁,但是在跟踪中找不到日志中的详细信息

时间:2018-08-03 11:38:39

标签: oracle logging deadlock

我的一个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?

我应该启用某些功能吗?我想念什么?

感谢您的时间,如果可以为您提供更多有用的信息,请告诉我。

2 个答案:

答案 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查询)