改進
在目前的 SQL Server 虛擬備份裝置介面(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 命令,此更新也會在 VDF_RequestComplete 和 VDF_CompleteEnabled中新增兩個新的 VDI 功能。
更新資訊
此改進包含在 SQL Server 的下列累積更新中: Sql server 2016 的累積更新 2 SP1 sql server 2016 的累加更新 4
Sql server 2012 Service Pack 3 (SP3)累積更新5的 sql SERVER 2014 SP2累積更新10(適用于 sql server 2014 SP1 )
關於 SQL Server 的累計更新
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
其他相關資訊
若要使用 [新增 VDC_Complete ] 命令,必須將下列實現套用到您的 VDI 用戶端:
-
要求新的 VDI 功能 VDF_RequestComplete。 如果 SQL Server 支援 VDC_Complete命令,則會傳回 not Null 回應。 否則,它會針對要求的功能傳回 Null 回應。 這裡的程式碼範例示範如何要求功能:
m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete; printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
-
使用GetConfiguration函數判斷 SQL Server 是否支援新的VDC_Complete命令。
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; }
-
當您處理 GetCommand 函數所提取的 VDI 訊息時,請新增額外的 case 語句來處理 VDC_Complete 命令。
case VDC_Complete: // Close the media and ensure that book keeping is completed. backupMedia->Close(); completionCode = ERROR_SUCCESS; break;
注意VDC_Complete 郵件必須併入備份應用程式中,才能使用此改進。
參考
瞭解 Microsoft 用於描述軟體更新的 詞彙 。