تصحيح: رسالة خطأ عند محاولة إدراج بيانات عن مشترك دمج النسخ المتماثل في SQL Server 2005: "في رسالة 548، مستوى 16 حالة 2، السطر 1. فشل الإدراج "

الخطأ رقم: 50002854 (الإصلاح العاجل SQL)
تقوم Microsoft بتوزيع الإصلاحات Microsoft SQL Server 2005 كأحد الملفات القابلة للتحميل. لأن الإصلاحات التراكمي، كل إصدار جديد يحتوي على كافة الإصلاحات العاجلة وإصدار تصحيح كافة تصحيحات الأمان التي تم تضمينها مع SQL Server 2005 السابقة.

الأعراض

اطلع على السيناريو التالي. يمكنك تكوين منشور دمج في SQL Server 2005. يمكنك إضافة جدول يحتوي على عمود تعريف إلى منشور دمج. ثم يمكنك إدراج البيانات في الجدول على الناشر. قم بمزامنة البيانات بين الناشر والمشترك، وحاول إدراج بيانات إضافية على الناشر. في هذا السيناريو، تتلقى رسالة الخطأ التالية على الناشر:
رسالة 548، مستوى 16 حالة 2، السطر الأول
فشل الإدراج. أنه يتعارض مع قيد check نطاق هوية في قاعدة بيانات 'اسم قاعدة البيانات'، الجدول المنسوخ 'مخطط. اسم جدول'، العمود'ColumnName'. إذا كان عمود التعريف تلقائياً يديرها النسخ المتماثل، تحديث النطاق كما يلي: الناشر، تنفيذ sp_adjustpublisheridentityrange؛ للمشترك، تشغيل عامل توزيع أو دمج عامل.
إذا حاولت تشغيل sp_adjustpublisheridentityrange في الإجراء المخزن على الناشر كما هو مذكور في رسالة الخطأ، لا تزال لا يمكن حل هذه المشكلة.

تحدث هذه المشكلة عند مزامنة عدة "عوامل دمج" البيانات في نفس الوقت لمنشور دمج نفس. يمكن أن تتفاقم هذه المشكلة إذا كان لديك العديد من المشتركين إلى منشور دمج.

السبب

تحدث هذه المشكلة لقيمة الهوية الحالية للجدول على الناشر ليست ضمن نطاق التعريف قيد الهوية نطاق الاختيار. يحدث هذا السلوك عند محاولة عدة "عوامل دمج" زيادة نطاق الهوية في نفس الوقت بإنشاء نطاق التعريف التالي على الناشر.

الحل

تم إصدار الإصلاح الخاص بهذه المشكلة أولاً في 8 التحديث التراكمي. لمزيد من المعلومات حول كيفية الحصول على حزمة التحديث التراكمي ل SQL Server 2005 Service Pack 2، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
951217 التراكمية حزمة 8 تحديث ل SQL Server 2005 Service Pack 2
ملاحظة: لأن البنيات تراكمية، يحتوي كل إصدار إصلاح جديد على كافة الإصلاحات العاجلة وإصدار تصحيح كافة تصحيحات الأمان التي تم تضمينها مع SQL Server 2005 السابقة. توصي Microsoft بمراعاة تطبيق أحدث إصدار للإصلاح الذي يحتوي على هذا الإصلاح العاجل. لمزيد من المعلومات، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":
937137 بناء SQL Server 2005 التي تم إصدارها بعد إصدار SQL Server 2005 Service Pack 2
يتم إنشاء الإصلاحات العاجلة ل Microsoft SQL Server 2005 لحزم خدمة SQL Server معينة. يجب تطبيق إصلاح عاجل SQL Server 2005 Service Pack 2 على تثبيت SQL Server 2005 Service Pack 2. بشكل افتراضي، يتم تضمين أي إصلاح جديد قد يتوفر في حزمة خدمـات لـ SQL Server في حزمة خدمـات لـ SQL Server التالية.

الحل البديل

للتغلب على هذه المشكلة، يجب منع عمليات المزامنة دمج المتزامنة المتعددة. للقيام بذلك، تعيين الخاصية max_concurrent_merge على منشور دمج عن طريق تشغيل العبارة التالية:
sp_changemergepublication '<PublicationName>', 'max_concurrent_merge', 1
ملاحظة: بعد استخدام هذا الحل البديل، قد إنقاص الأداء إذا كان لديك العديد من المشتركين للمنشور. يحدث هذا السلوك لمشترك واحد فقط مزامنة البيانات في كل مرة.

الحالة

أقرت Microsoft أن هذه مشكلة في منتجات Microsoft المسردة في قسم "ينطبق على".

مزيد من المعلومات

كيفية تحديد ما إذا كنت تواجه هذه المشكلة

لتحديد ما إذا كنت تواجه هذه المشكلة، اتبع الخطوات التالية:
  1. تحقق من أن قيمة الهوية الحالية أقل من الحد السفلي لنطاق هوية قيد الهوية نطاق الاختيار الأول.

    للحصول على قيمة الهوية الحالية، قم بتشغيل العبارة التالية:
    SELECT IDENT_CURRENT ('<TableName>')
    للحصول على نطاقات هوية قيد الهوية نطاق الاختيار، قم بتشغيل أي من العبارات التالية:
    البيان الأول
    sp_helpconstraint '<TableName>'
    البيان 2
    select * from MSmerge_identity_rangewhere is_pub_range <>1
    AND artid IN
    (select artid from sysmergearticles where name='<TableName>')
    AND subid in
    (select subid from sysmergesubscriptions MS
    join sysmergepublications MP
    on MS.subscriber_server=MP.publisher
    AND MS.db_name = MP.publisher_db
    WHERE name='<PublicationName>'
    )

  2. استخدام تتبع SQL Server منشئ ملفات التعريف لتحديد ما إذا كان يتم تشغيل معشق التشغيلات للإجراء sp_MSsetup_publisher_idrange المخزنة بجلسات "دمج العامل" منفصلة لنفس المنشور.

    ومع ذلك، معشق التشغيلات للإجراء sp_MSsetup_publisher_idrange المخزنة لا دوماً تشير إلى تواجه هذه المشكلة. هذا سبب عدم تشغيل منشئ ملفات التعريف ملقم SQL عند إنشاء التكرار الأصلي لمزامنة دمج أول رسالة خطأ. ومع ذلك، زيادة معشق التشغيلات للإجراء sp_MSsetup_publisher_idrange تخزين إمكانية مواجهة هذه المشكلة.
  3. يمكنك العثور على عمليات المزامنة دمج المتداخلة التي تحدث عند ظهور رسالة الخطأ "548". للقيام بذلك، يمكنك مراجعة محفوظات الدمج في قاعدة التوزيع. للقيام بذلك، قم بتشغيل العبارات التالية:
    Use distributionGO
    select session_id, agent_id, B.publication, min(time) as StartTime, max(time) as EndTime
    into #sessiontimes
    from dbo.MSmerge_history A
    join dbo.msmerge_agents B
    on A.agent_id = B.id
    group by session_id, agent_id, publication
    order by 3 desc
    GO
    -- The left side result is the original session. The right side result is the overlapping session.
    select A.*, B.*
    from #sessiontimes A
    Join #sessiontimes B
    On B.StartTime >= A.StartTime
    AND B.StartTime <= A.EndTime
    AND A.session_id <> B.session_id
    And A.publication=B.publication
    Order By A.StartTime asc
    GO
    drop table #sessiontimes

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

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

ملاحظة: تتضمن هذه الخطوات يدوياً تجاوز القيمة الأصلية الهوية الحالية للجدول ريسيد القيمة هوية الناشر بشكل صحيح. في حالة تلف، قيمة الهوية الحالية أصغر من نطاق التعريف الأول في دمج النسخ المتماثل هوية النطاق قيد التحقق من الصحة. الخطوات يدوياً برفع القيمة الهوية التي تقع داخل نطاق التعريف المحدد بواسطة دمج النسخ المتماثل هوية النطاق قيد التحقق من الصحة. تفترض هذه الخطوات أن يتم تكوين الهويات على نحو تصاعدي وزيادة التعريف مهيأ لزيادة بقيمة 1.
  1. تأكد من أن قيمة الزيادة الهوية 1 والمتابعة الهوية بشكل تصاعدي. يمكنك الحصول على قيمة الزيادة الهوية عن طريق تشغيل العبارة التالية على الناشر:
    SELECT IDENT_INCR( '<TableName>')
  2. تشغيل publisher العثور على قيمة الهوية الحالية على عمود هوية مشكوك فيه العبارة التالية:
    DBCC CHECKIDENT ('<TableName>')
    بعد ظهور النتيجة، لاحظ القيمة قيمة الهوية الحالية للمقارنة في الخطوات التالية. لاحظ أن
    فالي قيمة العمود الحالي قد يكون أكبر أو أصغر من القيمة قيمة الهوية الحالية .


    إذا كانت القيمة قيمة العمود الحالي أكبر من القيمة قيمة الهوية الحالية ، فقد نشأت في نسخ متماثلة أخرى في الطبولوجيا قيمة العمود ودمجها بنجاح باستخدام publisher للنسخ المتماثل. إذا كانت القيمة قيمة العمود الحالي أصغر من القيمة قيمة الهوية الحالية ، القيم قد تم إدراج على الناشر في وقت سابق باستخدام عبارة SET IDENTITY_INSERT ON قبل تكوين النسخ المتماثل الدمج.
  3. تشغيل publisher لتحديد نطاقات الهوية الحالية نطاق هوية تدقيق القيد لجدول مشكوك فيه العبارات التالية:
    Use <PublishedDatabaseName>GO
    sp_helpconstraint '<TableName>'
    GO

    بعد ظهور النتيجة، لاحظ القيمة
    عمود constraint_keys سجل فيها القيمة
    constraint_name العمود هو "repl_identity_range_المعرف الفريد العمومي". قيمة GUID التي تقابل القيمة
    عمود artid للمادة في جدول نظام سيسميرجيرتيكليس. للحصول على المعرف الفريد العمومي، تشغيل العبارة التالية:
    select artid from sysmergearticles where name = '<TableName>'
    القيد check نطاق الهوية يمتد نطاقين منفصلة. يلزم أن هاتين المجموعتين من نطاقات القريبة. على سبيل المثال، قيمة العمود constraint_keys يمكن أن تكون كما يلي:
    ([ColumnName] > (1001) و [ColumnName] < =(2001)

    [ColumnName] أو > (9001) و [ColumnName] < =(10001))
    ملاحظة: يستخدم هذا المقال هذا المثال لعرض التعليمات البرمجية في باقي الخطوات.

    في هذا المثال، تمتد نطاقات كل قيم 1000. 1000 هو حجم النطاق الافتراضي. ومع ذلك، يمكنك تغيير حجم نطاق الهوية باستخدام أحد الأساليب التالية:
    • تحديد معلمة @pub_identity_range عند قيامك بتشغيل إجراء مخزن sp_addmergearticle.
    • تغيير خاصية حجم النطاق المشترك لهذه المادة في
      مربع الحوار خصائص المقالة .
  4. في حالة مواجهة المشكلة الموضحة في قسم "الأعراض"، يجب أن تكون قيمة الهوية الحالية الذي قمت بتدوينه في الخطوة 2 أقل من الحد السفلي لنطاق التعريف الأول هوية النطاق قيد التحقق من الصحة الذي قمت بتدوينه في الخطوة 3.

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

    لمزيد من المعلومات حول الإجراء sp_adjustpublisheridentityrange المخزنة، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
  5. تشغيل العبارة التالية تحديد ما إذا كانت أية صفوف في نطاقات الهوية الحالية قيد الهوية نطاق الاختيار:
    SELECT COUNT(*) FROM TableName WHERE ([ColumnName]>(1001) AND [ColumnName]<=(2001) 
    OR [ColumnName]>(9001) AND [ColumnName]<=(10001))

    ملاحظات
    • إذا كانت العبارة بإرجاع صفر، يتم أية صفوف في النطاقات الهوية الحالية. في هذه الحالة، انتقل إلى الخطوة 6.
    • إذا كان البيان الذي يقوم بإرجاع قيمة أكبر من 0، تشغيل العبارة التالية للحصول على قيمة الحد الأقصى الهوية في النطاقات الهوية الحالية:
      SELECT MAX(ColumnName) as MaxValue FROM TableName WHERE ([ColumnName]>(1001) AND [ColumnName]<=(2001) OR 
      [ColumnName]>(9001) AND [ColumnName]<=(10001))

      لاحظ القيمة التي تم إرجاعها ومن ثم انتقل إلى الخطوة 7.
  6. ريسيد الهوية الحالية للجدول إشكالية تقع داخل نطاق صالح يدوياً.


    Reseed الهوية الحالية إلى أقل قيمة من نطاقات الهوية الحالية بالإضافة إلى 1. على سبيل المثال، إذا كانت القيمة أقل من نطاقات الهوية الحالية 1001، أول قيمة في نطاق ممكن هو 1002 نظراً لانخفاض نهاية نطاق الاختيار قيد نطاق الهوية يستخدم أكبر من (>). للقيام بذلك، تشغيل العبارة التالية على الناشر، ومن ثم انتقل إلى الخطوة 8:
    DBCC CHECKIDENT ('TableName', RESEED, 1002)
  7. ريسيد الهوية الحالية للجدول إشكالية تقع داخل نطاق صالح يدوياً.

    يفترض أن زيادة التعريف هي 1. ريسيد الهوية الحالية للقيمة التي قمت بتدوينه في الخطوة 5، ثم قم بإضافة 1. على سبيل المثال، إذا كانت القيمة التي قمت بتدوينه في الخطوة 5 1507، ريسيد الهوية الحالية ل 1508. للقيام بذلك، تشغيل العبارة التالية على الناشر:
    DBCC CHECKIDENT ('TableName', RESEED, 1508)
  8. إجراء اختبار لتحديد ما إذا كان يمكن إدراج صفوف جديدة إلى الجدول في قاعدة بيانات ناشر دون حدوث خطأ 548.
لمزيد من المعلومات حول تغيير ما هي الملفات و للحصول على معلومات حول أية متطلبات مسبقة لتطبيق حزمة التحديث التراكمي الذي يحتوي على الإصلاح الجديد الموضح في مقالة قاعدة معارف Microsoft، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
951217 التراكمية حزمة 8 تحديث ل SQL Server 2005 Service Pack 2

المراجع

لمزيد من المعلومات حول القائمة الطريقة التي تتوفر بعد SQL Server Service Pack 2، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
937137 بناء SQL Server 2005 التي تم إصدارها بعد إصدار SQL Server 2005 Service Pack 2
لمزيد من المعلومات حول "نموذج تقديم تزايدي" ل SQL Server، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
935897 "نموذج تقديم تزايدي" يتوفر من فريق SQL Server لتسليم الإصلاحات العاجلة للمشاكل التي تم الإبلاغ عنها
لمزيد من المعلومات حول كيفية الحصول على SQL Server 2005 Service Pack 2، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
كيفية الحصول على أحدث حزمة خدمة ل SQL Server 2005 913089
لمزيد من المعلومات حول الميزات الجديدة والتحسينات في SQL Server 2005 Service Pack 2، قم بزيارة موقع Microsoft التالي على الويب:لمزيد من المعلومات حول مخطط التسمية لتحديثات SQL Server، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
حزم تحديث مخطط تسمية جديدة 822499 لبرامج Microsoft SQL Server
لمزيد من المعلومات حول مصطلحات تحديث البرامج، انقر فوق رقم المقال التالي لعرضه في "قاعدة معارف Microsoft":
824684 وصف للمصطلحات القياسية المستخدمة في وصف تحديثات برامج Microsoft
خصائص

رقم الموضوع: 953481 - آخر مراجعة: 14‏/01‏/2017 - المراجعة: 1

تعليقات