در صورتی که دو کاربر قصد ویرایش یک رکورد را داشته باشند، کاربری که دیرتر دستور update را اجرا کرده Block خواهد شد و تا زمانی که کاربر اول(کاربری که زودتر رکورد را در اختیار گرفته) به تراکنش خاتمه ندهد، کاربر دوم در حالت Block باقی خواهد ماند.
--session 1:
SQL> select sid from v$mystat where rownum=1;
SID
----------
2190
SQL> update USEF.TBL1 set id=1;
1 row updated
--session 2:
SQL> select sid from v$mystat where rownum=1;
SID
----------
944
SQL> update USEF.TBL1 set id=1;
Executing…
بلاک شدن session دوم را می توانیم از طریق دستور زیر ببینیم:
SQL> select SID,ID1,ID2,LMODE,block,request from v$lock where type='TX';
SID ID1 ID2 LMODE BLOCK REQUEST
---------- ---------- ---------- ---------- ---------- ----------
944 458766 2511 0 0 6
2190 458766 2511 6 1 0
ممکن است کاربر دوم که تراکنشش در حالت انتظار قرار دارد، برای ما اولویت بیشتری داشته باشد. در این حالت چه راهکاری وجود دارد؟