【发布时间】:2013-12-09 16:00:15
【问题描述】:
在使用多个用户测试我的应用程序时,我遇到了 ORA-00060 死锁错误。我不确定如何确定这个错误的原因,所以如果有人可以帮助我,将不胜感激。
我查看了为此事件生成的跟踪文件,它告诉我是哪个查询导致了这个:
UPDATE TABLE_A SET CK=CK+1 WHERE A_ID=(
SELECT A_ID FROM TABLE_B WHERE SOME_COLUMN=:SOMECOLUMN
)
它也产生了这个:
[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
TM-0002a675-00000000 51 200 SX SSX 52 22 SX SSX
TM-0002a675-00000000 52 22 SX SSX 51 200 SX SSX
session 200: DID 0001-0033-0000014A session 22: DID 0001-0034-0000005A
session 22: DID 0001-0034-0000005A session 200: DID 0001-0033-0000014A
Rows waited on:
Session 200: obj - rowid = 0002A6B1 - AAAqaxAAUAAAAFTAAA
(dictionary objn - 173745, file - 20, block - 339, slot - 0)
Session 22: obj - rowid = 0002A6B1 - AAAqaxAAUAAAAFTAAA
(dictionary objn - 173745, file - 20, block - 339, slot - 0)
如何使用以上信息找出问题的原因? TABLE_A 或 TABLE_B 上没有任何未索引的外键(我认为这通常是导致此类错误的原因)。
当我运行这个查询时:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OBJECT_ID = 173745;
我得到了一个完全不同的表上的主键名称!这可能是为什么会发生死锁的线索吗?
【问题讨论】:
-
我认为您的问题是 Stack Overflow 的主题,但只是想确保您了解 Database Administrators。可能有人在该网站上了解这些类型的问题。
标签: sql oracle database-deadlocks