KB3188454 - 改善: SQL Serverの VDC_Complete コマンドを使用して VDI プロトコルを強化する

適用先
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仮想バックアップ デバイス インターフェイス (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 クライアントへのデータの送信が完了SQL Server示す新しい 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

SQL Server 2012 Service Pack 3 (SP3) の累積的な更新プログラム 5 

SQL Server 2014 SP2 の累積的な更新プログラム 3 

SQL Server 2014 SP1 の累積的な更新プログラム 10

SQL Server 用の累積的な更新プログラムについて

SQL Server 用の累積的な更新プログラムについて

SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。

SQL Server 2016 の最新の累積的な更新プログラム

SQL Server 2014 SP1/SP2 の最新の累積的な更新プログラム

SQL Server 2012 SP3 の最新の累積的な更新プログラム

追加情報

新しい VDC_Complete コマンドを使用するには、VDI クライアントに次の実装を適用する必要があります。

  1. 新しい VDI 機能のVDF_RequestCompleteを要求します。 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. 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;
           }
    
  3. 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 メッセージは、改善を使用できるようにバックアップ アプリケーションに組み込む必要があります。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。