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?
When Oracle detects a deadlock, the current SQL in the session detecting the deadlock is cancelled and 'statement-level rollback' is performed so as to free up resources and not block all activity. The session that detected the deadlock is still 'alive' and the rest of the transaction is still active.
LOCK IN SHARE MODE ), try using a lower isolation level such as READ COMMITTED . When modifying multiple tables within a transaction, or different sets of rows in the same table, do those operations in a consistent order each time. Then transactions form well-defined queues and do not deadlock.
I found the answer:
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;
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With