【问题标题】:Oracle - find table on which a deadlock occurredOracle - 查找发生死锁的表
【发布时间】:2017-06-20 07:14:53
【问题描述】:

我的 Oracle 数据库中发生了死锁。当我从同一个表中同时删除两个实体时,会发生死锁 (ORA-00060)。我怎样才能知道在哪张桌子上设置了锁?

到目前为止我所做的是:

  1. 我获得了一个包含死锁图的跟踪文件,所以第一个问题是:我能否使用死锁图中的资源名称以某种方式识别已在其上设置锁的表?如何?资源名称格式如下:TM-000168D7-00000000-00000005-00000000
  2. 似乎外键缺失索引是这种死锁最常见的来源,所以我检查了是否有一些缺失的索引并且找不到。但是,架构非常复杂,所以我可以忽略它。

有什么提示或建议吗?

【问题讨论】:

标签: oracle hibernate


【解决方案1】:

有许多在线资源可以帮助您了解死锁。

“TM”是一个事务或 DML 入队(锁),因此在提交之前,您可能有一个事务运行时间超过了应有的时间。

这是一个查找未索引外键的脚本:

select cc.owner, cc.table_name, cc.column_name, cc.position   
from dba_cons_columns cc
where 
 cc.owner not in ('SYS','SYSTEM')
 and position is not null
minus
select i.index_owner, i.table_name, i.column_name, i.column_position
from dba_ind_columns i
where 
 i.index_owner not in ('SYS','SYSTEM')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2013-06-25
    相关资源
    最近更新 更多