الأعراض
عند استخدام النسخ المتطابقة لقاعده البيانات في Microsoft SQL Server 2012 أو Microsoft SQL Server 2014 ، قد تصيب شرط تاكيد ويتم إدخال نسخ متطابقة لقاعده البيانات إلى حاله التوقف.
السبب
تحدث هذه المشكلة عند تخصيص صفحه جديده ، يحصل SQL Server علي تامين X علي الصفحة الجديدة. سيضع SQL Server الhobt_id (كومه الذاكرة المؤقتة أو معرف الشجرة) التي تنتمي اليها الصفحة الجديدة في طلب التامين. ومع ذلك ، لا يمكن ان يضع SQL Server الhobt_id في سجل الانعكاس وينتج عنه سلوك تامين مختلف بين الأساسي والنسخة المتطابقة. يمكن شرح هذا بالتفصيل كما يلي:
-
في T1 ، اضغط علي مفتاح تامين إيكس علي الصفحة P1.
-
T2 تنفيذ تقسيم الصفحة علي P1 ، وتخصيص صفحه جديده P2 ، يتم استخدام معامله النظام TX هنا ، وهي تحتوي علي X قفل في P2. هنا لم يقم SQL Server بوضع الhobt_id في سجل النسخ المتطابقة.
-
TX يقوم الترحيل المؤمن ل T1 بنقل تامين إيكس من P1 إلى P2.
-
تم منح TX ، يمكن الآن ل T2 استخدام الصفحة P2 ، و T2 الحصول علي تامين إيكس آخر في الصفحة P2.
-
تم منح T1 ، والآن يكون الخيار T2 هو الذي يحتفظ بقفل ايكس في P2.
-
بعد الانتهاء من الادراج ، يحدث تصعيد تامين ، في الأساسي ، T2 يقوم بتحرير الايكس في P2 ، ولكن علي النسخة المتطابقة اثناء تصعيد lock ، T2 لم تصدر القفل الايكس.
-
بعد الانتهاء من عمليه الحذف ، تصبح الصفحة P2 فارغه وهي ديلوكاتيد.
-
يحتاج T3 إلى صفحه جديده ، ويحدث ذلك لتخصيص P2 ، يتطلب هذا الاجراء قفل X ، ولكن علي النسخة المتطابقة ، فشل هذه الخطوة بسبب الخطوة 6.
في النسخة المتطابقة ، لا تصدر الخطوة 6 القفل إيكس لان الhobt_id الموجودة في كتله التامين غير صحيحه. ياتي هذا الhobt_id غير الصحيحة في الخطوة 2 ونظرا لعدم قيام SQL Server بوضع الhobt_id في السجل المتطابق. عاده لا تري اي مشكله بسبب ان TX في الخطوة 2 قصير جدا ، سيتم تحرير كتله التامين باستخدام الhobt_id غير الصحيح عند التزام. ومع ذلك ، بسبب الترحيل المقفل في step3 والخطوات التالية (4 و 5) ، يتم الاحتفاظ بكتله التامين هذه مع hobt_id غير صحيحه وأخيرا تؤدي إلى حدوث المشكلة. لم تحدث هذه المشكلة لأنها تستخدم hobt_id صحيحه في الخطوة 2. ولكن سجل السجل ليس لديه hobt_id صحيحه.
الحل
تم تصحيح المشكلة أولا في التحديث التراكمي التالي ل SQL Server.
تحديث تراكمي 1 ل SQL Server 2014 /en-us/help/2931693
تحديث تراكمي 9 ل SQL Server 2012 SP1 /en-us/help/2931078
يحتوي كل تحديث تراكمي جديد ل SQL Server علي كل الإصلاحات العاجلة وكل تصحيحات الأمان التي تم تضمينها في التحديث التراكمي السابق. اطلع علي آخر التحديثات التراكمية ل SQL Server:
الحل البديل
لحل هذه المشكلة ، قم باعاده تهيئه النسخة المتطابقة لإنهاء الحالة المعلقة.
الحالة
أقرت Microsoft أن هذه المشكلة تحدث في منتجات Microsoft المسردة في المقطع "تنطبق على".