ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

อาการ

สมมติว่า คุณสร้างกลุ่มความพร้อมใช้งาน โดยใช้ส่วนคําสั่ง 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 ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์

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

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

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

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

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×