【问题标题】:Oracle deadlock on non-foreign key column非外键列上的Oracle死锁
【发布时间】:2017-12-15 18:34:09
【问题描述】:
  1. 我们有一个表 A,它在 Oracle 数据库中有一个列 X
  2. X 列是一个数字列,它不是任何表的外键。
  3. 我们的应用程序确实刷新了数据(删除旧的 数据,获取新数据,查询X列的最大值,然后 在表 A) 中插入数据。
  4. 更新说明:我们在应用程序日志中看到了死锁。成为 精确的Caused by: java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource.
  5. 我们知道这个应用程序使用了 spring 和 hibernate。查询采用 HQL 格式。

有没有人遇到过这种情况?鉴于列 X 没有任何外键约束,我们真的很难理解为什么死锁会出现在该列上。

感谢您的帮助和意见。

【问题讨论】:

  • 真的是死锁吗?如果是这样,您得到的是 ORA-00060 还是 ORA-04020?如果是 ORA-00060,请查找生成的跟踪文件,并从跟踪文件中发布死锁图、遇到死锁的语句以及涉及死锁的其他语句。这是解释死锁的关键信息。

标签: oracle deadlock


【解决方案1】:

截至 4:您的意思是“Oracle 似乎检测到死锁”是​​什么意思?存在或不存在死锁。

您是否查询过 V$LOCKED_OBJECT?这样的查询可能会有所帮助:

select
  o.owner,
  o.object_name,
  o.object_type
from
  v$locked_object l ,
  v$session s,
  dba_objects o
where l.object_id = o.object_id
  and s.sid = l.session_id;

它会返回任何东西吗?

此外,是什么让您认为存在僵局?那里有什么错误吗?如果有,是哪一个?

最后,如果在 A 表的 X 列上创建索引会怎样?

【讨论】:

  • 我应该在语言上更有力。我们在应用程序日志中看到了死锁。准确地说
  • 我应该在语言上更有力。我们在应用程序日志中看到了死锁。准确地说是Caused by: java.sql.SQLException: ORA-00060: deadlock detected while waiting for resource。他们没有尝试添加索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多