【问题标题】:How to find current SQL statment that causes Deadlock in oracle?如何在oracle中找到导致死锁的当前SQL语句?
【发布时间】:2018-09-19 11:33:04
【问题描述】:

如何找到导致 oracle 中其他会话死锁的确切当前 SQL 语句?

【问题讨论】:

  • 一旦 Oracle 检测到死锁,当其中一个会话被终止时,这两个语句都将列在 Oracle 生成的跟踪文件中

标签: oracle deadlock


【解决方案1】:

在 v$session 中查找阻塞实例和阻塞会话。

select * from v$session

这应该让您知道阻塞会话的 SID 和 SERIAL#。

Edit -- 这是针对阻塞的会话,而不是死锁。 如果它是一个实际的死锁,它应该自动清除(最终)。 顺便说一句,根据 AskTom 的说法,“Oracle 中死锁的第一大原因是未索引的外键。”

select vs.blocking_session from v$session vs
where vs.sid in
(
select userenv('sid') as sid from dual
);

如果这不是 NULL,则使用 SID 从 v$session 中选择 * 其中 vs.SID = '从上方阻塞会话' ;

【讨论】:

  • 如果出现死锁,则会话被阻塞 - Oracle 取消导致死锁的语句。
  • 你能给我完整的 SQL 语句来显示导致死锁的当前 SQL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多