محتويات الدورة

قاعدة بيانات أوراكل / المتوسط: SQL التطبيقات والأدلة / الدرس 12

القفل والعزل والتراجع

احمِ قيود السعة وميّز الانتظار الطبيعي والتعارض الدائري وغياب النسخ التاريخية.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • استخدم الكتابة الشرطية والقفل الصريح بتوقعات محدودة.
  • اشرح التعافي من القفل الدائري والقراءة المتسقة المعتمدة على undo.

احمِ الشرط عند حد الكتابة

قد تقرأ جلستان free_units = 2 وتقررا حجز وحدتين كلتاهما. قد تفقد كتابة غير شرطية لاحقة اعتماداً على القيمة القديمة حجزاً أو تتجاوز السعة. يجعل الخفض الشرطي الفحص والتغيير عملية واحدة ويفحص المستدعي الصفوف المتأثرة. يشكل CHECK لعدم السلبية دفاعاً إضافياً لكنه لا يحدد نتيجة الحجز للمستخدم. اجمع الانتقال التجاري وعقد العدد ونطاق المعاملة، ولا تعتمد تعطيل زر الواجهة لتسلسل طلبات عملاء مختلفين.

sql مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
UPDATE capacity
SET free_units = free_units - :requested_units
WHERE slot_id = :slot_id
  AND :requested_units > 0
  AND free_units >= :requested_units;

يقبل التطبيق صفاً متأثراً واحداً بالضبط ويثبّته مع الحجز المرتبط. للمعلمات أنواع رقمية مراجعة.

اقفل أثناء القرار فقط

يقفل SELECT ... FOR UPDATE الصفوف لتعديل مضبوط لاحق. اجعل المعاملة قصيرة ولا تنتظر شخصاً أو خدمة HTTP مع حمل القفل. يبلغ NOWAIT فوراً عن عدم توفره، ويحد WAIT الانتظار بالثواني وفق الصياغة الموثقة. لـSKIP LOCKED استخدامات شبيهة بالطوابير وقد يحذف الصفوف المشغولة؛ فلا تستخدمه في تقرير يعد بكل العمل المؤهل. خيارات القفل عقد لسلوك التزاحم وليست مفتاح تسريع عاماً. يوضح المثال صف سعة معلوماً واحداً فقط.

sql مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
SELECT free_units
FROM capacity
WHERE slot_id = :slot_id
FOR UPDATE WAIT 3;

في مختبر مؤقت مصرح به ينتظر حتى الحد المحدد للأقفال المتعارضة. لم يُمارَس قفل أو توقيت هنا فعلياً.

العبارة المتسقة ليست معاملة مجمدة

يوفر READ COMMITTED اتساقاً على مستوى العبارة، لذلك قد يرى SELECT ثانٍ عمل معاملة أخرى ثُبّت حديثاً. توفر المعاملات SERIALIZABLE والقرائية صورة على مستوى المعاملة مع قيودها. قد يتلقى الكاتب المتسلسل ORA-08177 عندما يمنع تغيير متعارض التسلسل المتوقع. تتطلب الإعادة بدء المعاملة التجارية كاملة بقرارات حديثة لا إعادة العبارة الأخيرة فوق حالة تطبيق قديمة. اختر العزل وفق القيد واستراتيجية الإعادة لا الاعتقاد بأن الاسم الأقوى يصلح كل عيب تزامن.

القفل الدائري دورة وليس انتظاراً عادياً

إذا حملت المعاملة A الصف 7 وطلبت 8، وحملت B الصف 8 وطلبت 7، لا تتقدم أي منهما. تكشف أوراكل الدورة وتبلغ مشاركاً بـORA-00060. راجع نطاق التراجع الموثق وأنهِ وحدة التطبيق أو أعدها صراحة بدلاً من افتراض إلغاء كل العبارات السابقة. يقلل ترتيب موحد لطلب الموارد هذه الدورات. احتفظ بالأثر التشخيصي وسياق SQL المعتمدين؛ قتل جلسات عشوائياً أو زيادة المهلة لا يصلح بروتوكول طلب متناقض.

تعتمد القراءة المتسقة على توفر النسخ القديمة

يدعم undo التراجع وإعادة بناء صور كتل مثبتة أقدم للقراءة المتسقة. قد يحتاج استعلام طويل تاريخاً لم يعد متاحاً فيفشل بـORA-01555. يتطلب التشخيص مدة الاستعلام وأنماط التعديل وأدلة undo المعتمدة، ولا يثبت أن كل استعلام يحتاج احتفاظاً ثابتاً أكبر. قد يكون تقليل العمل أو تعديل الدفعات أنسب من وصفة تخزين عامة. وتحتاج المعاملة القرائية الطويلة نسخاً تاريخية أيضاً. خطّط للاستخراج بنقطة اتساق وميزانية مدة وسياسة استئناف؛ «للقراءة فقط» لا يعني بلا تكلفة تشغيلية.

الأخطاء الشائعة وإصلاحها

ORA-00054

لماذا يحدث؟
واجه طلب مورد فوري استخداماً متعارضاً.
كيف تصلحه؟
حدّد المعاملة المالكة وطبّق سياسة الانتظار أو الإعادة.
كيف تتجنب تكراره؟
قصّر العمل الحامل للقفل واجعل التزاحم نتيجة واجهة معروفة.

ORA-00060

لماذا يحدث؟
طلبت المعاملات موارد بترتيب يشكل دورة انتظار.
كيف تصلحه؟
تراجع عن وحدة التطبيق المقصودة وافحص ترتيب الطلب.
كيف تتجنب تكراره؟
استخدم ترتيباً موحداً لتغييرات الأعمال متعددة الصفوف.

ORA-01555

لماذا يحدث؟
لا يستطيع الاستعلام إعادة بناء نسخة مطلوبة من undo المتاح.
كيف تصلحه؟
راجع المدة ومعدل التعديل وأدلة undo المصرح بها معاً.
كيف تتجنب تكراره؟
حدّد ميزانية للاستخراج الطويل وتحقق من تصميم قابل للاستئناف.

اختبر فهمك

1. لماذا لا تؤمن قراءة السعة ثم كتابة قيمة مطلقة لاحقاً الحجوزات المتزامنة؟

اعرض الحل المشروح

قد تبني الجلستان الاستبدال على القيمة القديمة نفسها. استخدم خفضاً ذرياً شرطياً وافحص العدد، أو اقفل الصف في معاملة قصيرة مراجعة. اجمع الحجز والسعة في وحدة واحدة وحدّد استجابة رفض بدلاً من قبول صفر صفوف بصمت.

2. يحتاج عاملان الخانتين 7 و8. كيف يفيد ترتيب مشترك؟

اعرض الحل المشروح

يطلب كلاهما 7 قبل 8 فيزول مثال الدورة المعاكسة. يقلل هذا فئة من الأقفال الدائرية ولا يثبت أمان كل تفاعل. ضمّن الجداول والقيود الأخرى في المراجعة واحتفظ بانتظار محدود وسياسة إعادة المعاملة كاملة للتعارضات العابرة.

أهم ما تعلمته

  • ينتمي ضبط التزامن إلى الانتقال المخزن لا الواجهة فقط.
  • تحتاج الانتظارات والدورات وغياب نسخ undo إلى تشخيصات مختلفة.

المراجع الرسمية