KB3188454 - Cải tiến: Nâng cao Giao thức VDI với lệnh VDC_Complete trong SQL Server

Áp dụng cho
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

Cải tiến

Trong quá trình triển khai giao thức Giao diện Thiết bị Sao lưu Ảo (VDI) SQL Server hiện tại, tin nhắn cuối cùng được gửi từ SQL Server đến máy khách VDI sẽ là lệnh VDC_Flush. Để ngăn mất dữ liệu, máy khách VDI phải hoàn tất việc sao lưu trước khi phản hồi lệnh VDC_Flush.

Bắt đầu từ SQL Server 2008 và sự ra đời của FILESTREAM, lệnh VDC_Flush có thể được gửi nhiều lần trong một lần sao lưu. Thao tác này gây ra sự cố khiến máy khách VDI phải hoàn tất sao lưu nhiều lần trong quá trình sao lưu. Điều này không khả thi đối với một số máy khách VDI. Ngoài ra, nếu máy khách VDI phản hồi lệnh VDC_Flush mà không đảm bảo bản sao lưu được tăng cường khi có thêm dữ liệu sau VDC_Flush, SQL Server có thể cắt bớt nhật ký giao dịch. Tuy nhiên, nếu việc sao lưu cuối cùng không thành công trên máy khách VDI và nhật ký giao dịch cũng bị cắt bớt, dữ liệu có thể bị mất.

Bản cập nhật này thêm một VDC_Complete lệnh VDI mới cho biết SQL Server đã hoàn tất việc gửi dữ liệu đến máy khách VDI. Do đó, máy khách VDI sẽ có thể hoàn tất việc sao lưu trước khi gửi phản hồi đến SQL Server.

Chức năng này cho phép máy khách VDI không sao lưu được trong trường hợp có sự cố xảy ra, đồng thời cũng ngăn nhật ký giao tác bị cắt bớt do nhầm lẫn.

Lưu ý: Để hỗ trợ lệnh VDC_Complete mới, bản cập nhật này cũng bổ sung hai tính năng VDI mới VDF_RequestComplete và VDF_CompleteEnabled.

Thông tin cập nhật

Cải thiện này có trong các bản cập nhật tích lũy sau đây dành cho SQL Server:

     Bản cập nhật tích lũy 2 cho SQL Server 2016 SP1

     Bản cập nhật tích lũy 4 cho SQL Server 2016

Bản cập nhật tích lũy 5 cho SQL Server 2012 Gói Dịch vụ 3 (SP3) 

Bản cập nhật tích lũy 3 cho SQL Server 2014 SP2 

Bản cập nhật tích lũy 10 cho SQL Server 2014 SP1

Giới thiệu về các bản cập nhật tích lũy cho SQL Server

Giới thiệu về các bản cập nhật tích lũy cho SQL Server

Mỗi bản cập nhật tích lũy mới dành cho SQL Server chứa tất cả các bản sửa lỗi nóng và bản sửa lỗi bảo mật được tích hợp trong bản cập nhật tích lũy trước đó. Xem các bản cập nhật tích lũy mới nhất cho SQL Server:

Bản cập nhật tích lũy mới nhất cho SQL Server 2016

Bản cập nhật tích lũy mới nhất cho SQL Server 2014 SP1/SP2

Bản cập nhật tích lũy mới nhất cho SQL Server 2012 SP3

Xem thêm thông tin

Để sử dụng lệnh VDC_Complete mới, phải áp dụng những triển khai sau cho máy khách VDI của bạn:

  1. Yêu cầu tính năng VDI mới VDF_RequestComplete. Nếu SQL Server hỗ trợ lệnh VDC_Complete, nó sẽ trả về phản hồi NOT NULL. Nếu không, nó sẽ trả về phản hồi NULL cho tính năng được yêu cầu. Ví dụ về mã ở đây cho biết cách yêu cầu tính năng này:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Xác định xem SQL Server có hỗ trợ lệnh VDC_Complete mới hay không bằng cách sử dụng hàm 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. Khi bạn xử lý các thông báo VDI được tìm nạp bởi hàm GetCommand, hãy thêm một câu lệnh case bổ sung để xử lý lệnh VDC_Complete.

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

Lưu ý Thông báo VDC_Complete phải được kết hợp vào ứng dụng sao lưu để ứng dụng có thể sử dụng phần cải tiến.

Tham khảo

Tìm hiểu về thuật ngữ mà Microsoft dùng để mô tả các bản cập nhật phần mềm.