ORA-00060: Deadlock detected while waiting for resource.
Transactions deadlock one another waiting for resources. When this happens, these transactions are stuck (deadly embraced) and cannot continue processing.
Oracle automatically detects deadlocks and resolves them by rolling back one of the statements involved in the deadlock, thus releasing one set of data locked by that statement. The session that is rolled back will observe Oracle error: ORA-00060: deadlock detected while waiting for resource. Oracle will also write out a trace file with detailed information to the database’s UDUMP directory.
Multi-table deadlocks can be avoided by locking tables in same order (in all applications), thus preventing a deadlock condition. For example, session1 lock table: emp then dept; session2: emp then dept. If this is not possible, your application should check for ORA-60 errors and restart the rolled back transactions.
How to fix it
Look at the trace file to see the transactions and resources involved. Retry if necessary.
Example
Here is an example of how to simulate a deadlock error:
Session 1 lock table EMP:
SQL> UPDATE emp SET sal=sal+100;
14 rows updated.
Session 2 lock table DEPT:
SQL> UPDATE dept SET loc = ‘Japan’;
4 rows updated.
Session 1 now update DEPT. The session will hang waiting for a lock (not a deadlock yet!):
SQL> UPDATE dept SET loc = ‘Japan’;
Session 2 now update EMP, causing the deadlock:
SQL> UPDATE emp SET sal=sal+100;
Oracle will detect the deadlock and roll back one of these statements:
SQL> UPDATE emp SET sal=sal+100;
UPDATE emp SET sal=sal+100
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource
0 Comments