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

SQL Server / المتقدم / الدرس 18

وصول التطبيق ومسارات العمل المتينة

ادمج SQL Server في حد تطبيق موثوق، واجمع الأوامر المحددة النوع ومجمعات الاتصال المحدودة ومنع التكرار والتعديل المتفائل والصفحات ومعالجة فشل واعية بالمعاملة.

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

أهداف الدرس

  • تحديد عقد آمن لأوامر المشغل.
  • شرح التثبيت المجهول ومنع التكرار الدائم.
  • استخدام صفحات بالمفتاح مستقرة وحد صندوق صادر.

اضبط عمر الاتصالات واستهلك النتائج

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

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

اربط قيماً دقيقة وافحص شكل النتيجة

استخدم معلمات المشغل بأنواع SQL Server صريحة وأطوال ودقة ومنازل عشرية مناسبة. تجنب استنتاج النوع الذي يحول مفتاحاً رقمياً إلى نص أو يغير أطوال النص بما يعقد إعادة الخطط. يوضح مثال sp_executesql عقد تاريخ ونص Unicode؛ ويجب أن ينفذ التطبيق ربطاً مكافئاً عبر موفره دون GO.

افحص الأعمدة وعدد الصفوف المتوقع. استخدم DBNull أو تمثيل المشغل الموثق للقيمة المفقودة لا النص 'NULL'. افصل التفويض عن الربط واختر المعرفات الديناميكية من خرائط معتمدة فقط. يجب توثيق النجاح ورفض العمل والتعارض والفشل العابر والنتيجة المجهولة صراحة.

sql عقد أمر بنص Unicode وتاريخ
DECLARE @label nvarchar(40)=N'طلب تجريبي';
DECLARE @day date=DATEFROMPARTS(2026,1,15);
EXEC sys.sp_executesql
 N'SELECT @name AS label,@created AS created_on;',
 N'@name nvarchar(40),@created date',
 @name=@label,@created=@day;
الناتج المتوقع
label       created_on
طلب تجريبي  2026-01-15

التاريخ قيمة محددة النوع لا نصاً تابعاً للثقافة، ويظل الوصف Unicode طوال الربط.

اجعل الطلبات المتكررة تشير إلى عملية واحدة

يمكن لمفتاح عملية يولده العميل مع قيد UNIQUE تحديد طلب مقصود واحد عبر الإعادات. احفظ في معاملة واحدة المفتاح وهوية المحتوى المتحقق منها وتغييرات الطلب ومعلومات الاستجابة. يجب أن يقود التكرار إلى جلب العملية الأصلية أو مصالحتها لا إنشاء طلب ثانٍ. ارفض استخدام المفتاح نفسه لمحتوى مختلف.

يجب أن يعالج التنفيذ محاولتين أوليين متزامنتين؛ ولا يكفي EXISTS تمهيدي. استخدم تصميماً مراجعاً بالتفرد أو الأقفال. إن فُقد الاتصال أثناء COMMIT فقد يكون الخادم ثبّت رغم خطأ العميل. استعلم بالمفتاح الدائم نفسه لمعرفة النتيجة قبل الإعادة. يختلف ذلك عن تراجع 1205 المؤكد.

قسّم الصفحات بعقد ترتيب كامل

لمفتاح متزايد مستقر تطلب الصفحات بالمفتاح قيماً أكبر من آخر قيمة مع TOP وORDER BY. تتجنب تجاوز إزاحات متنامية في مسار الصفحة التالية البسيط. يعيد المثال المعرفين 3 و4 بعد 2. وقد تحتاج الشروط والفرز الفعليان رمز متابعة مركباً يضم جميع مكونات الترتيب.

ليست هذه الصفحات لقطة تلقائية لبيانات متغيرة. قد تؤثر الإضافة والحذف والتحديث في الصفحات اللاحقة؛ حدد هل المطلوب تدفق حي أو تصدير متسق. تحتاج OFFSET/FETCH أيضاً ترتيباً فريداً وقد تنزاح عندما تتغير الصفوف السابقة. اعتبر اتساق الصفحات والتفويض جزءاً من عقد الواجهة.

sql صفحة بسيطة بالمفتاح
DECLARE @lastId int=2,@pageSize int=2;
SELECT TOP (@pageSize) OrderId
FROM (VALUES (1),(2),(3),(4),(5))v(OrderId)
WHERE OrderId>@lastId
ORDER BY OrderId;
الناتج المتوقع
OrderId
3
4

رمز المتابعة لهذا الترتيب البسيط هو 4؛ ويحتاج ترتيب الإنتاج جميع المفاتيح وسياسة تغير محددة.

نسق حالة القاعدة والآثار الخارجية

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

راجع المسار كله: نطاق مستأجر موثوق ومعلمات محددة وكمية موجبة وتحديث مخزون محمي ومفتاح طلب دائم وتنظيف المعاملة وسجل الصندوق واستجابة ثابتة. اختبر التزامن والمفاتيح المكررة بمحتوى مطابق ومختلف وإعادة 1205 والمهل وفقد التأكيد. يكتمل الحد عندما تعالج النجاح والغموض بقصد.

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

The connection pool is exhausted.

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

Retry created two orders.

لماذا يحدث؟
أُعيد تثبيت مجهول دون هوية عملية دائمة.
كيف تصلحه؟
صالح النتيجة بالمفتاح الأصلي الفريد.
كيف تتجنب تكراره؟
صمم منع التكرار قبل الإعادات.

Emails duplicated after worker restart.

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

اختبر فهمك

1. تنتهي مهلة العميل أثناء COMMIT. هل يولد مفتاحاً جديداً؟

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

لا؛ احتفظ بالأصلي وصالح النتيجة الدائمة. قد يمثل الجديد عملية ثانية رغم تثبيت الأولى. عالج النتيجة المجهولة مستقلة عن التراجع المؤكد.

2. يرسل عامل حدثاً ويتوقف قبل تسجيل الاكتمال. ماذا يدعم المستهلك؟

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

قد يصل الحدث ثانية. استخدم معرف حدث مستقراً ومعالجة متكررة آمنة أو منع تكرار. تحل معاملة القاعدة إنشاء الحدث ذرياً لا التسليم البعيد مرة واحدة تماماً.

أهم ما تعلمته

  • يشكل ربط الأنواع والتفويض وحدود الموارد حد التطبيق.
  • فقد رد التثبيت غموض لا إثبات تراجع.
  • تحتاج المفاتيح الدائمة والصندوق معالجة تكرار صريحة.

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