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

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

تعديل البيانات وMERGE والاستيراد دون تكرار

طبّق تغييرات المصدر بصورة حتمية مع حفظ مفاتيح الأعمال وحداثة البيانات وأمان الإعادة.

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

أهداف الدرس

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

ميّز الاستبدال من التراكم

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

طابق هوية مستقرة

يختار MERGE التحديث أو الإدراج عبر ON. يعامل المثال tracking_code مفتاح أعمال فريداً وsource_version مراجعة مرتبة له. تُحدّث المراجعة الأحدث الحالة، وتترك المساوية أو الأقدم الصف دون تغيير. يمنع ذلك ملفاً قديماً من الكتابة فوق حالة أحدث، بافتراض موثوقية الإصدارات وقابليتها للمقارنة. افرض تفرّد الهدف وتحقق من صف مصدر واحد مختار لكل مفتاح. ليست MERGE محرك إزالة تكرار تلقائياً ولا بديلاً لتنسيق الكتّاب المتزامنين.

sql مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
MERGE INTO shipment_state t
USING staged_state s ON (t.tracking_code = s.tracking_code)
WHEN MATCHED THEN UPDATE
 SET t.status = s.status, t.source_version = s.source_version
 WHERE s.source_version > t.source_version
WHEN NOT MATCHED THEN INSERT (tracking_code, status, source_version)
 VALUES (s.tracking_code, s.status, s.source_version);

يفترض تفرّد staged_state حسب tracking_code. لا تعيد المراجعة نفسها تحديث الصف المطابق، لكن ذلك لا يثبت صحة دلالات الأحداث التراكمية.

ارفض الالتباس قبل تعديل الهدف

يتطلب صفا مصدر بالرمز نفسه وحالتين مختلفتين سياسة لا ترتيباً عشوائياً. إذا كانت المراجعات فريدة، اختر أعلاها مع قاعدة حتمية للتعادل. وإذا حملت المراجعة نفسها محتويين متعارضين، فاعزل التعارض. يكشف GROUP BY المفاتيح المكررة لكنه لا يمنع تغيير المصدر لاحقاً؛ استخدم دفعة مرحلية مستقرة وملكية معاملة موثقة. جرد التكرار دليل تشخيص وليس أمر إصلاح. احتفظ بمصدر كافٍ لتفسير سبب قبول مراجعة محددة بعد أشهر.

sql مثال تقني توضيحي؛ النتائج المنطقية مستنتجة ولم تُختبر على المحرك.
SELECT tracking_code, COUNT(*) AS source_rows
FROM staged_state
GROUP BY tracking_code
HAVING COUNT(*) > 1
ORDER BY tracking_code;

يحتاج كل مفتاح معاد إلى حل موثق قبل MERGE التوضيحي. لا تكون النتيجة الخالية ذات دلالة إلا للدفعة الثابتة نفسها.

افحص الصفوف المتأثرة والأخطاء منفصلين

يمكن لـUPDATE شرطي التعبير عن حجز السعة بعبارة واحدة: اخفض free_units فقط إذا كفت البقية. يفحص المستدعي مطابقة صف واحد ويفسر الصفر كرفض انتقال أو معرّف غائب أو شرط قديم وفق عقد الواجهة. نجاح العبارة مع صفر صفوف ليس إخفاق محرك. وبالمقابل، لا يعني تسجيل الصفوف المرفوضة في التحميل الجماعي السماح بإهمالها بصمت. حدّد هل الدفعة ذرية أم مقبولة جزئياً، وكيف تُعرض المرفوضات وكيف تتجنب الإعادة تكرار الآثار المثبتة.

تغيير الهوية عملية مختلفة

لا تسمح أوراكل بتحديث عمود مستخدم في ON داخل فرع التحديث المطابق. والأهم أن تغيير رمز التتبع قد يعني تصحيحاً أو اسماً بديلاً أو شحنة جديدة، ولكل منها آثار تدقيق مختلفة. عالج التصحيح بمسار صريح مراجع بدلاً من تحريف شرط المزامنة لقبوله. افصل الوقت عن رقم المراجعة؛ فقد تتراجع الساعات وتختلف الجهات. تحتاج المراجعة المتزايدة من المصدر إلى نطاق محدد، بينما يسجل received_at توقيت الاستلام لا الحقيقة التجارية.

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

ORA-30926

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

ORA-38104

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

تضاعف الإعادة تعديلاً مالياً

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

اختبر فهمك

1. حالة الإصدار 8 مخزنة ويعيد الاستيراد الإصدار 6. ماذا تفعل MERGE في المثال؟

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

يطابق المفتاح لكن شرط WHERE للتحديث غير صحيح، فلا يقع تحديث ويبقى الإصدار 8. سجّل نتيجة المصدر القديم إذا احتاجت المطابقة ذلك. تعتمد القاعدة على مراجعات قابلة للمقارنة ولا تثبت صحة المحتوى نفسه.

2. يشترك صفان في المفتاح والإصدار ويختلفان في الحالة. هل اختيار آخر صف مادي مبرر؟

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

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

أهم ما تعلمته

  • تنفّذ MERGE سياسة هوية وحداثة مختارة ولا تخترعها.
  • يتطلب أمان الإعادة مفاتيح أعمال دائمة ومحاسبة صريحة للدفعات.

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