如何识别Oracle死锁中涉及的行? [英] How can I identify the rows involved in an Oracle deadlock?

查看:55
本文介绍了如何识别Oracle死锁中涉及的行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Oracle检测到死锁时,将写入如下所示的跟踪文件:

When Oracle detects a deadlock, a trace file like this is written:

*** SESSION ID:(56.27081) 2012-05-14 08:16:28.013
DEADLOCK DETECTED ( ORA-00060 )
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock: Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TX-0010002c-002719b5       146      56     X            164      44           X
TX-000f002a-002edd1e       164      44     X            146      56           X
session 56: DID 0001-0092-00050D0D       session 44: DID 0001-00A4-0002E3C2
session 44: DID 0001-00A4-0002E3C2       session 56: DID 0001-0092-00050D0D
Rows waited on:
Session 44: obj - rowid = 00035157 - AAA1FXAAxAAASfLAAn
  (dictionary objn - 217431, file - 49, block - 75723, slot - 39)
Session 56: obj - rowid = 00035157 - AAA1FXAAsAACjuiAAP
  (dictionary objn - 217431, file - 44, block - 670626, slot - 15)

如何根据上述信息确定所涉及的行,以帮助调试应用程序?

How can I determine the rows involved based on the information above in order to assist in debugging the application?

推荐答案

我找到了答案:

  1. dictionary objn之后的数字可用于从DBA_object中选择.

  1. The number after dictionary objn can be used to select out of DBA_objects.

SELECT owner, object_name, object_type 
FROM dba_objects 
WHERE object_id = 217431;

  • 一旦识别了表,就可以使用rowid找到该行:

  • Once the table is identified, the row can be found using the rowid:

    SELECT * 
    FROM table_found_above 
    WHERE rowid = 'AAA1FXAAxAAASfLAAn';
    

  • 如果跟踪文件说没有等待的行",则此技术将不起作用.该问题可能是由于未索引的外键造成的.

    If the trace file says that there are no "Rows waited on" this technique will not work. The problem may be due to an unindexed foreign key.

    这篇关于如何识别Oracle死锁中涉及的行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆