| From: | Steve Adams |
| Date: | 22-Mar-2001 17:50 |
| Subject: | ITL and possible deadlocks |
|
|
In the case of a two-way ITL deadlock, the two processes will be waiting for S mode locks on each other's TX enqueues. These waits time-out every 3 seconds. Each time one of these waits times-out, if no process has released or obtained a lock on the resource during the preceding interval, then deadlock detection will be performed by the process whose wait timed-out (PMON is not involved). Deadlock detection involves looking at the state object trees is the SGA that describe fully the resources that each process has an interest in. If any session that is holding a lock on the required resource in an incompatible mode is waiting directly or indirectly for a resource that is held by the current session in an incompatible mode, then a deadlock exists and an ORA-00060 error will be raised. This is explained more fully on page 45 of my book.
|
![]() |
If I've understood you correctly in general there is no difference between the mentioned case and common row deadlock. At least I get ORA-60 in both cases. Will you be so kind to explain _how_ does Oracle recognize ITL deadlocks? Is PMON somehow involved in this process?
|
![]() |
Yes, this is possible and does result in a deadlock. Oracle detects the deadlock and raises an ORA-60 error as with other types of deadlocks.
|
![]() |
It's rather a theoretical question. Let say two sessions update a table. Each transaction allocated a transaction slot in a block (I consider the two different blocks). Each block has only one slot and there is no free space in these blocks to allocate additional transaction slots. Then each transaction tries to update a row in the block which has already been updated by the other transaction. How Oracle to do with such situation in case when there is no access to a common resource (I mean a common row)?
|