นำไปใช้กับ
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows

อาการ

สมมติว่า คุณสร้างกลุ่มความพร้อมใช้งาน โดยใช้ส่วนคําสั่ง WITH DTC_SUPPORT = PER_DB ใน microsoft SQL Server เมื่อคุณพยายามดําเนินการคําสั่ง SAVE TRANSACTION ในทรานแซคชันหรือกระบวนการที่เก็บไว้ของระบบ เช่น sp_executesql คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

Msg 627, ระดับ 16, สถานะ 0, LineNumber ไม่สามารถใช้ SAVE TRANSACTION ภายในธุรกรรมที่กระจายได้Msg 12324, ระดับ 16, รัฐ 100, LineNumber ธุรกรรมที่แจกจ่าย (DTC) จะไม่ได้รับการสนับสนุนกับตารางที่ปรับให้เหมาะสมหน่วยความจําข้อผิดพลาด: 3933 ความรุนแรง: 16 รัฐ: 1ไม่สามารถเลื่อนระดับธุรกรรมเป็นธุรกรรมที่กระจายได้ เนื่องจากมีจุดบันทึกที่ใช้งานอยู่ในธุรกรรมนี้

สาเหตุ

เมื่อฐานข้อมูลในกลุ่มความพร้อมใช้งานเสมอถูกเปิดใช้งานสําหรับ WITH DTC_SUPPORT = PER_DB ตราบใดที่ทรานแซคชันเกี่ยวข้องกับหลายฐานข้อมูล ทรานแซคชันจะเลื่อนระดับเป็นทรานแซคชัน MSDTC ใน SQL Server 2016 SP2 และ SQL Server 2017 มีข้อจํากัดในธุรกรรม MSDTC ตัวอย่างเช่น ไม่สามารถใช้จุดบันทึกได้ ไม่สามารถใช้ตารางที่ปรับให้เหมาะสมกับหน่วยความจําได้

ในบางสถานการณ์ ทรานซิชันข้ามฐานข้อมูลไม่ได้เกิดขึ้นเนื่องจากผู้ใช้มีธุรกรรมที่เกี่ยวข้องกับฐานข้อมูลผู้ใช้สองฐานข้อมูล แต่เนื่องจากธุรกรรมเกี่ยวข้องกับฐานข้อมูลปัจจุบันและฐานข้อมูลระบบ (หลัก tempdb แบบจําลอง ฐานข้อมูลทรัพยากรระบบ) เนื่องจากฐานข้อมูลทรัพยากรของระบบเป็นแบบอ่านอย่างเดียวจึงไม่จําเป็นต้องเลื่อนระดับเป็นทรานแซคชัน MSDTC ถ้าทรานแซคชันข้ามฐานข้อมูลเกี่ยวข้องกับฐานข้อมูลทรัพยากรระบบ แต่ไม่ใช่ฐานข้อมูลระบบอื่นๆ 

การแก้ไข

การแก้ไขที่แนะนําใน KB นี้จะข้ามการเลื่อนระดับไปยังทรานแซคชัน MSDTC ถ้าฐานข้อมูลทรัพยากรระบบและฐานข้อมูลผู้ใช้ที่เป็นส่วนหนึ่งของกลุ่มความพร้อมใช้งานที่เปิดใช้งานสําหรับPER_DB DTC จะเกี่ยวข้องกับทรานแซคชันข้ามฐานข้อมูลภายในอินสแตนซ์SQL Serverเดียวกัน

ดังนั้น ถ้าสาเหตุดั้งเดิมของข้อผิดพลาดที่แสดงข้างต้นเป็นทรานแซคชันข้ามฐานข้อมูลที่เกี่ยวข้องกับฐานข้อมูลทรัพยากรระบบ บางครั้งผู้ใช้อาจเห็นข้อผิดพลาดที่แสดงอยู่ด้านบนที่มีสาเหตุพื้นฐานเหมือนกัน ต่อไปนี้จะแสดงเงื่อนไขที่นําการแก้ไขนี้ไปใช้:

  • ฐานข้อมูลเป็นส่วนหนึ่งของกลุ่มความพร้อมใช้งานเสมอที่เปิดใช้งานด้วย DTC_SUPPORT = PER_DB

  • ทรานแซคชันฐานข้อมูลแบบไขว้เกี่ยวข้องกับฐานข้อมูลนี้และฐานข้อมูลทรัพยากรระบบในอินสแตนซ์SQL Serverเดียวกัน

  • ภายในทรานแซคชันข้ามฐานข้อมูล จะมีการใช้ SAVE TRANSACTION หรือใช้ตารางที่ปรับให้เหมาะสมกับหน่วยความจํา

การทําธุรกรรมดังกล่าวจะล้มเหลวโดยมีข้อผิดพลาดที่ระบุไว้ข้างต้นโดยไม่ต้องแก้ไขนี้ ด้วยการแก้ไขนี้ธุรกรรมดังกล่าวควรดําเนินการต่อ

หมายเหตุ: การแก้ไขนี้แก้ไขทรานแซคชันข้ามฐานข้อมูลที่เกี่ยวข้องกับฐานข้อมูลทรัพยากรระบบ แต่ทรานแซคชันข้ามฐานข้อมูลใดๆ ที่เกี่ยวข้องกับฐานข้อมูลของผู้ใช้และมีคําสั่ง SAVE TRANSACTION จะยังคงล้มเหลวและต้องเขียนใหม่

ปัญหานี้ได้รับการแก้ไขแล้วในการอัปเดตแบบสะสมต่อไปนี้สําหรับ SQL Server:

แต่ละปรับปรุงสะสมใหม่สําหรับSQL Serverประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการปรับปรุงสะสมก่อนหน้านี้ ดูการอัปเดตแบบสะสมล่าสุดสําหรับSQL Server:

ข้อมูลเพิ่มเติม

ข้อมูลเพิ่มเติมเกี่ยวกับ DTC_SUPPORT = PER_DB, ตารางที่ปรับหน่วยความจําให้เหมาะสม, SAVE TRANSACTION สามารถพบได้ที่ลิงก์ต่อไปนี้

ทรานสชันฐานข้อมูลภายในอินสแตนซ์SQL Serverเดียวกันจะเชื่อมโยงส่วนนี้เข้ากับ https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instanceตารางที่ปรับให้เหมาะสมกับหน่วยความจํา https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsเชื่อมโยงบันทึกทรานแซคชันไปยังส่วนนี้ไปยัง https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

สถานะ

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

อ้างอิง

เรียนรู้เกี่ยวกับ คําศัพท์เฉพาะทาง ที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์

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

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

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