KB3188454 - ปรับปรุง: ปรับปรุงโพรโทคอล VDI ด้วยคําสั่ง VDC_Complete ใน SQL Server

นำไปใช้กับ
SQL Server 2012 Service Pack 3 SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) 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 2016 Service Pack 1

การปรับปรุง

ในการใช้งานโพรโทคอล SQL Server Virtual Backup Device Interface (VDI) ปัจจุบัน ข้อความล่าสุดที่ส่งจาก SQL Server ไปยังไคลเอ็นต์ VDI จะเป็นคําสั่ง VDC_Flush เพื่อป้องกันการสูญหายของข้อมูล ไคลเอนต์ VDI ต้องเสร็จสิ้นการสํารองข้อมูลก่อนที่จะตอบสนองต่อคําสั่ง VDC_Flush

เริ่มต้นด้วย SQL Server 2008 และบทนําของ FILESTREAM คําสั่ง VDC_Flush สามารถส่งได้หลายครั้งระหว่างการสํารองข้อมูล การดําเนินการนี้ทําให้เกิดปัญหาที่ไคลเอ็นต์ VDI ต้องเสร็จสิ้นการสํารองข้อมูลหลายครั้งในระหว่างการดําเนินการสํารองข้อมูล ซึ่งไม่สามารถทําได้สําหรับบางไคลเอ็นต์ VDI นอกจากนี้ ถ้าไคลเอ็นต์ VDI ตอบสนองต่อคําสั่ง VDC_Flush โดยไม่ตรวจสอบให้แน่ใจว่าการสํารองข้อมูลจะเข้มงวดเมื่อมีข้อมูลเพิ่มเติมหลังจาก VDC_Flush SQL Server อาจตัดทอนบันทึกธุรกรรม อย่างไรก็ตาม หากการสํารองข้อมูลล้มเหลวในที่สุดบนไคลเอ็นต์ VDI และบันทึกธุรกรรมถูกตัดทอน การสูญเสียข้อมูลอาจเกิดขึ้น

โปรแกรมปรับปรุงนี้เพิ่มคําสั่ง VDI ใหม่ VDC_Complete ที่ระบุว่า SQL Server ได้เสร็จสิ้นการส่งข้อมูลไปยังไคลเอ็นต์ VDI ดังนั้น ไคลเอนต์ VDI จะสามารถเสร็จสิ้นการสํารองข้อมูลก่อนที่จะส่งการตอบสนองไปยัง SQL Server

ฟังก์ชันการทํางานนี้ช่วยให้ไคลเอ็นต์ VDI ล้มเหลวในการสํารองข้อมูลในกรณีที่มีบางอย่างผิดพลาด และยังป้องกันไม่ให้มีการตัดทอนบันทึกทรานแซคชันโดยไม่ได้ตั้งใจ

หมายเหตุ เมื่อต้องการสนับสนุนคําสั่ง VDC_Complete ใหม่ การอัปเดตนี้ยังเพิ่มฟีเจอร์ VDI ใหม่สองฟีเจอร์ VDF_RequestComplete และ VDF_CompleteEnabled

ข้อมูลการปรับปรุง

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

     การอัปเดตสะสม 2 สําหรับ SQL Server 2016 SP1

     การอัปเดตสะสม 4 สําหรับ SQL Server 2016

การอัปเดตสะสม 5 สําหรับ SQL Server 2012 Service Pack 3 (SP3) 

การอัปเดตสะสม 3 สําหรับ SQL Server 2014 SP2 

การอัปเดตสะสม 10 สําหรับ SQL Server 2014 SP1

เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server

เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server

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

การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2016

การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2014 SP1/SP2

การอัปเดตสะสมล่าสุดสําหรับ SQL Server 2012 SP3

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

เมื่อต้องการใช้คําสั่ง VDC_Complete ใหม่

  1. ร้องขอ VDF_RequestComplete คุณลักษณะ VDI ใหม่ หาก SQL Server สนับสนุนคําสั่ง VDC_Complete คําสั่งจะส่งกลับไม่เป็นการตอบสนอง NULL มิฉะนั้น จะส่งกลับการตอบสนองเป็น NULL สําหรับฟีเจอร์ที่ร้องขอ ตัวอย่างรหัสที่นี่จะแสดงวิธีการร้องขอฟีเจอร์:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. ตรวจสอบว่า SQL Server สนับสนุนคําสั่ง VDC_Complete ใหม่โดยใช้ฟังก์ชัน GetConfiguration หรือไม่

    hr = m_pvdiComponents->m_pvdDeviceSet->GetConfiguration(timeout, m_pvdiComponents->m_pvdConfig);
    
           if (!(m_pvdiComponents->m_pvdConfig->features & VDF_CompleteEnabled))
           {
                  printf("Server does not support VDC_Complete.");
                  return VD_E_NOTSUPPORTED;
           }
    
  3. เมื่อคุณประมวลผลข้อความ VDI ที่เรียกใช้โดยฟังก์ชัน GetCommand ให้เพิ่มคําสั่งกรณีเพิ่มเติมเพื่อประมวลผลคําสั่ง VDC_Complete

    case VDC_Complete:
                  // Close the media and ensure that book keeping is completed.
                  backupMedia->Close();
                  completionCode = ERROR_SUCCESS;
                  break;
    

หมายเหตุ ข้อความ VDC_Complete ต้องรวมอยู่ในแอปพลิเคชันการสํารองข้อมูลเพื่อให้สามารถใช้การปรับปรุงได้

การอ้างอิง

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