Oracle - 查找发生死锁的表

时间:2017-06-20 07:14:53

标签: oracle hibernate

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

到目前为止我所做的是:

  1. 我获得了一个包含死锁图的跟踪文件,因此第一个问题是:我可以使用死锁图中的资源名以某种方式识别已设置锁的表吗?怎么样?资源名称具有以下格式:TM-000168D7-00000000-00000005-00000000
  2. 似乎缺少外键索引是这种死锁的最常见来源,所以我检查了是否有一些缺失索引​​而找不到索引。但是,架构仍然很复杂,所以我可以忽略它。
  3. 任何提示或建议?

1 个答案:

答案 0 :(得分:0)

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

" 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')