DeadLock CRVENO i CRNO

DEADLOCK situacija
                               *
        Transaction A          *            Transaction B
                               *
      -------------------      *          ------------------
   |->|  has resource a |      *  |-----> | has resource b |
   |  -------------------      *  |       ------------------
   |                           *  |
   |     needs resource b  ----*---       needs resource a 
   |                           *                   |
   ----------------------------*--------------------

Jedna transakcija ne moze napraviti deadlock na samoj sebi.  
U situaciji koja se naziva deadlock, ucestvuju makar dve transakcije. 

Deadlock situacija nastaje kada dve ili više sesija čekaju podatke koji su međusobno zaključani. Kada se ovo dogodi sesije ne mogu da ostvare u potpunosti započete transakcije.

Oracle automatski detektuje deadlock situaciju i razrešava je tako što uradi roll back jedne od transakcija koja učestvuje u  deadlock. Sesija na kojoj se vrši ROLL BACK generiše grešku:

Oracle error: ORA-00060: deadlock detected while waiting for resource.

Oracle generiše i trace datoteku u UDUMP directorijum.

Session 1 crvena

Session 2 crna

SQL> select * from table1;

C
-
p
x
1

3 rows selected.

 
SQL> select * from table1;

C
-
p
x
1
SQL> update table1 set col1='2' where col1='1';
SQL> update table1 set col1='y' where col1='x';
SQL> update table1 set col1='z' where col1='x';  --waiting....   Analiza DictionaryViews u ovom trenutku
SQL> update table1 set col1='3' where col1='1';
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource

Dump file d:\oracle\product\10.2.0\admin\orcl\udump\test_ora_4000.trc
DEADLOCK DETECTED
[Transaction Deadlock]
Current SQL statement for this session:
update table1 set col1='z' where col1='x'
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.

Alert.log

Wed Oct 04 13:23:31 2006
ORA-00060: Deadlock detected. More info in file d:\oracle\product\10.2.0\admin\orcl\udump\test_ora_4000.trc.
***

Zaključak: Dok prvi proces čeka na update drugi proces izaziva deadlock.
Nakon što se automatski uradi roll back drugog procesa, prvi proces može da uradi update i commit.