Applies ToSQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

อาการ

เมื่อคุณใช้ฐานข้อมูลเรอร์ใน Microsoft SQL Server ๒๐๑๒หรือ Microsoft SQL Server ๒๐๑๔คุณอาจตีเงื่อนไข assert และเรอร์ของฐานข้อมูลเข้าสู่สถานะที่ถูกระงับ

สาเหตุ

ปัญหานี้เกิดขึ้นเนื่องจากเมื่อจัดสรรหน้าใหม่ SQL Server จะได้รับการล็อก X บนหน้าใหม่ SQL Server จะใส่รหัส hobt_id (ฮีปหรือ B-Tree) ที่หน้าใหม่เป็นสมาชิกของการร้องขอการล็อก อย่างไรก็ตาม SQL Server ไม่สามารถวาง hobt_id ในบันทึกเรอร์และผลลัพธ์ในลักษณะการทำงานล็อกที่แตกต่างกันระหว่างหลักและกระจก ซึ่งสามารถอธิบายได้ในรายละเอียดดังต่อไปนี้

  1. T1 ค้างการล็อกที่ IX บนหน้า P1

  2. T2 ทำการแบ่งหน้าใน P1, จัดสรรหน้าใหม่ P2, ทรานแซคชันระบบ TX จะถูกใช้ที่นี่ซึ่งจะถือว่าเป็นการล็อก X บน P2 ต่อไปนี้ SQL Server ไม่ได้ใส่ hobt_id ในแฟ้มบันทึกเรอร์

  3. TX จะเป็นการโยกย้ายล็อกสำหรับ T1 เพื่อย้ายล็อก IX จาก P1 เป็น P2

  4. ความมุ่งมั่นของ TX ในขณะนี้ T2 สามารถใช้หน้า P2 และ T2 ขอรับการล็อกอีก IX บนหน้า P2

  5. ให้ความมุ่งมั่นของ T1 ตอนนี้ T2 เป็นผู้เดียวที่มีการล็อก IX ใน P2

  6. หลังจากการแทรกจำนวนมากการเลื่อนระดับการล็อกจะเกิดขึ้นบนหลัก, T2 จะเผยแพร่ IX บน P2 แต่บนกระจกในระหว่างการเลื่อนระดับการล็อก, T2 ไม่ปล่อยการล็อก IX

  7. หลังจากการลบจำนวนมากหน้า P2 จะว่างเปล่าและเป็น deallocated

  8. 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 ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมดและการแก้ไขการรักษาความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตที่สะสมก่อนหน้านี้ ตรวจสอบการอัปเดตที่สะสมล่าสุดสำหรับ SQL Server:

วิธีแก้ไขปัญหาชั่วคราว

เมื่อต้องการแก้ไขปัญหาให้เตรียมใช้งานมิเรอร์เพื่อสิ้นสุดสถานะที่ถูกระงับ

สถานะ

Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย