شرایطی را در نظر بگیرید که قرار است فیلدی به عنوان شمارنده، دائما توسط تعداد زیادی session بروزرسانی شود(با همزمانی بالا) به این شیوه که با هر بار انجام «اقدامی مشخص»، دستور updateای اجرا شده و یک عدد به این شمارنده اضافه کند.
در این حالت با توجه به زیاد بودن تعداد sessionهای همزمان، احتمال رخ دادن Blocking session هم بسیار افزایش می یابد چرا که در دیتابیس اوراکل اگر دو کاربر قصد ویرایش یک رکورد را داشته باشند و با فاصله زمانی کمی دستور Update را اجرا کنند، کاربری که دیرتر دستور update را صادر کرده Block خواهد شد و تا زمانی که کاربر اول(کاربری که زودتر رکورد را در اختیار گرفته) به تراکنش خاتمه ندهد، کاربر دوم در حالت Block باقی خواهد ماند.
--session 1: SQL> select sid from v$mystat where rownum=1; SID ---------- 2190 SQL> update tbl_counter set counttt=counttt+1; 1 row updated
--session 2: SQL> select sid from v$mystat where rownum=1; SID ---------- 944 SQL> update tbl_counter set counttt=counttt+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
بنابرین زمانی که کاربران زیادی قصد کار بر روی یک رکورد را دارند، مکانیزم locking امکان ویرایش رکورد را در هر لحظه به یک نفر از آنها خواهد داد و بقیه sessionها Block می شوند. پیدا کردن ترفندی برای جلوگیری از Block شدن sessionها می تواند در بعضی از این شرایط نظیر «شرایط ذکر شده در ابتدای متن» بسیار راهگشا باشد.