อาการ
เมื่อคุณใช้ฐานข้อมูลเรอร์ใน Microsoft SQL Server ๒๐๑๒หรือ Microsoft SQL Server ๒๐๑๔คุณอาจตีเงื่อนไข assert และเรอร์ของฐานข้อมูลเข้าสู่สถานะที่ถูกระงับ
สาเหตุ
ปัญหานี้เกิดขึ้นเนื่องจากเมื่อจัดสรรหน้าใหม่ SQL Server จะได้รับการล็อก X บนหน้าใหม่ SQL Server จะใส่รหัส hobt_id (ฮีปหรือ B-Tree) ที่หน้าใหม่เป็นสมาชิกของการร้องขอการล็อก อย่างไรก็ตาม SQL Server ไม่สามารถวาง hobt_id ในบันทึกเรอร์และผลลัพธ์ในลักษณะการทำงานล็อกที่แตกต่างกันระหว่างหลักและกระจก ซึ่งสามารถอธิบายได้ในรายละเอียดดังต่อไปนี้
-
T1 ค้างการล็อกที่ IX บนหน้า P1
-
T2 ทำการแบ่งหน้าใน P1, จัดสรรหน้าใหม่ P2, ทรานแซคชันระบบ TX จะถูกใช้ที่นี่ซึ่งจะถือว่าเป็นการล็อก X บน P2 ต่อไปนี้ SQL Server ไม่ได้ใส่ hobt_id ในแฟ้มบันทึกเรอร์
-
TX จะเป็นการโยกย้ายล็อกสำหรับ T1 เพื่อย้ายล็อก IX จาก P1 เป็น P2
-
ความมุ่งมั่นของ TX ในขณะนี้ T2 สามารถใช้หน้า P2 และ T2 ขอรับการล็อกอีก IX บนหน้า P2
-
ให้ความมุ่งมั่นของ T1 ตอนนี้ T2 เป็นผู้เดียวที่มีการล็อก IX ใน P2
-
หลังจากการแทรกจำนวนมากการเลื่อนระดับการล็อกจะเกิดขึ้นบนหลัก, T2 จะเผยแพร่ IX บน P2 แต่บนกระจกในระหว่างการเลื่อนระดับการล็อก, T2 ไม่ปล่อยการล็อก IX
-
หลังจากการลบจำนวนมากหน้า P2 จะว่างเปล่าและเป็น deallocated
-
T3 จำเป็นต้องมีหน้าใหม่และจะเกิดขึ้นในการจัดสรร P2 ซึ่งจำเป็นต้องใช้การล็อก X แต่บนกระจกขั้นตอนนี้ล้มเหลวเนื่องจากขั้นตอนที่6
บนกระจกขั้นตอนที่6ไม่ปล่อยการล็อก IX เนื่องจาก hobt_id ในบล็อกล็อกไม่ถูกต้อง Hobt_id ที่ไม่ถูกต้องนี้จะมาในระหว่างขั้นตอนที่2และเนื่องจาก SQL Server ไม่ได้ใส่ hobt_id ในบันทึกเรอร์โดยปกติคุณจะไม่เห็นปัญหาใดๆเนื่องจาก TX ในขั้นตอนที่2สั้นมากและบล็อกการล็อกที่มี hobt_id ที่ไม่ถูกต้องจะถูกปล่อยออก อย่างไรก็ตามเนื่องจากการโยกย้ายล็อกในขั้นตอนที่3และขั้นตอนต่อไปนี้ (4 และ 5) บล็อกการล็อกนี้ที่มี hobt_id ที่ไม่ถูกต้องถูกรักษาไว้และสุดท้ายจะทำให้เกิดปัญหา หลักไม่มีปัญหานี้เนื่องจากใช้ hobt_id ที่ถูกต้องในขั้นตอนที่2 แต่ระเบียนบันทึกไม่มี hobt_id ที่ถูกต้อง
การแก้ไข
ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตที่สะสมของ SQL Server ครั้งแรก
การอัปเดตที่สะสม1สำหรับ SQL Server ๒๐๑๔ /en-us/help/2931693
การอัปเดตที่สะสม9สำหรับ SQL Server ๒๐๑๒ SP1 /en-us/help/2931078
การอัปเดตที่สะสมใหม่แต่ละรายการสำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการแก้ไขปัญหาให้เตรียมใช้งานมิเรอร์เพื่อสิ้นสุดสถานะที่ถูกระงับ
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"