如何识别Oracle死锁中涉及的行?

当Oracle检测到死锁时,会写入如下跟踪文件
*** 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)

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

我找到了答案:

>字典objn之后的数字可用于从DBA_objects中选择.

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

>识别完表后,可以使用rowid找到该行:

SELECT * 
FROM table_found_above 
WHERE rowid = 'AAA1fxaaxAAASfLAAn';

如果跟踪文件说没有“Rows等待”,这种技术将无效.问题可能是由于未编制索引的外键.

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...