改善
SQL Server 仮想バックアップデバイスインターフェイス (VDI) プロトコルの現在の実装では、SQL Server から VDI クライアントに送信される最後のメッセージは VDC_Flush コマンドです。 データの損失を防ぐため、VDI クライアントは VDC_Flush コマンドに応答する前にバックアップを完了する必要があります。 SQL Server 2008 と FILESTREAM の導入を開始すると、 VDC_Flush コマンドはバックアップ中に複数回送信できます。 この操作により、VDI クライアントでバックアップ操作中にバックアップを複数回完了する必要があるという問題が発生します。 一部の VDI クライアントでは、このようなことはできません。 さらに、 VDC_Flush後により多くのデータが表示された場合に、バックアップがセキュリティで強化されないように、VDI クライアントがVDC_Flushコマンドに応答すると、SQL Server でトランザクションログが切り捨てられる場合があります。 ただし、VDI クライアントで最終的にバックアップが失敗し、トランザクションログも切り捨てられた場合は、データが失われることがあります。この更新プログラムは、SQL Server による VDI クライアントへのデータ送信が完了したことを示す VDC_Complete 新しい VDI コマンドVDC_Completeを追加します。 そのため、VDI クライアントは、SQL Server に応答を送信する前にバックアップを完了することができます。この機能によって、問題が発生した場合に VDI クライアントはバックアップに失敗し、トランザクションログが誤って切り捨てられるのを防ぐことができます。注: 新しい [ VDC_Complete ] コマンドをサポートするために、この更新プログラムには VDF_RequestComplete と VDF_CompleteEnabledの2つの新しい VDI 機能も追加されています。
更新プログラムの情報
この改善点は、SQL Server の次の累積的な更新プログラムに含まれています。 Sql server 2016 SP1 の累積更新プログラム 2 (sql server 2016 の累積更新プログラム 4 )
累積的な更新プログラム 5 FOR Sql server 2012 Service Pack 3 (SP3) 累積更新プログラム 3(Sql Server 2014累積更新プログラム 10 (sql server 2014 SP1)
SQL Server の累積更新プログラムについて
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server 2016 の最新の累積的な更新プログラム
詳細情報
[新しい VDC_Complete ] コマンドを使用するには、次の実装を VDI クライアントに適用する必要があります。
-
VDF_RequestComplete 新しい VDI 機能をリクエスト します。 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);
-
SQL Server でGetConfiguration関数を使用して、新しい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 メッセージを処理する場合は、 VDC_Completeコマンドを処理するための追加の case ステートメントを追加します。
case VDC_Complete: // Close the media and ensure that book keeping is completed. backupMedia->Close(); completionCode = ERROR_SUCCESS; break;
注:VDC_Complete メッセージは、改善を使用できるようにバックアップアプリケーションに組み込む必要があります。
参照情報
ソフトウェアの更新を説明するために Microsoft が使用する 用語 について説明します。