Oracle Enqueue Mechanism
نشر بواسطة : Obay Salah , November 19, 2024
لنفرض أن Session طلبت عمل Lock لجدول أو حقل معين لكن وجدت ذلك الحقل أو الجدول مغلق بواسطة Session أخرى ستظل هذه الـSession في الانتظار،
لكن ماذا لو قام عدد من الـSessions بنفس الطلب سيتم وضع هذه الطلبات في صف حتى يتم إنهاء الـLock فيتم تمكين الـSession التالية من عمل الـLock وهكذا
حتى نهاية الصف وهذا ما يسمى بال(Enqueue).
لكن كيف يمكن تجاوز عملية الانتظار في الصف في حال وجود Lock على الجدول أو الحقل؟
الحل في مثل هذه الحالة عن طريق الخيار NOWAIT، بالطبع عملية الاستعلام (SELECT) لا تحتاج لعمل Lock ولكن عمليات الـDML تحتاج لعمل Lock،
فيمكن أن نستعمل الخيار NOWAIT لتجاوز عملية الوقوف في صف الانتظار أثناء عمليات الـDML في حال وجدنا الجدول أو الصف مغلق عن طريق Session أخرى.
ذكرنا سابقاً أن عملية SELECT لا تحتاج لإغلاق الحقول أو الجدول ولكن عبارة SELECT UPDATE FOR تقوم بإغلاق الحقول المستهدفة فإذا وجدت أن تلك الحقول
مغلقة بواسطة Session أخرى فهناك خياران الأول WAIT وهو للإنتظار ويمكن أن نحدد فترة الانتظار بالثواني.
والخيار الآخر هو NOWAIT وهو لإنهاء العملية في حالة وجود الحقل مشغول بجلسة أخرى.
SELECT * FROM TEST FOR UPDATE NOWAIT;
Comments
لايوجد تعليق حتى الان