KB3188454 - Melhoria: Melhore o protocolo VDI com VDC_Complete comando no SQL Server

Aplica-se a
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

Melhoria

Na implementação atual do protocolo SQL Server Virtual Backup Device Interface (VDI), a última mensagem enviada do SQL Server para o cliente VDI será um comando VDC_Flush. Para evitar a perda de dados, o cliente VDI deve concluir o backup antes de responder ao comando VDC_Flush.

A partir do SQL Server 2008 e da introdução do FILESTREAM, o comando VDC_Flush pode ser enviado várias vezes durante um backup. Essa operação causa um problema que o cliente VDI tem que concluir o backup várias vezes durante a operação de backup. Isso não é possível para alguns clientes VDI. Além disso, se o cliente VDI responder a um comando VDC_Flush sem garantir que o backup seja protegido quando mais dados estiverem chegando após o VDC_Flush, SQL Server poderá truncar o log de transações. No entanto, se o backup eventualmente falhar no cliente VDI e o log de transações também estiver truncado, a perda de dados poderá ocorrer.

Esta atualização adiciona um novo comando VDI VDC_Complete que indica que SQL Server concluiu o envio de dados para o cliente VDI. Portanto, o cliente VDI será capaz de concluir o backup antes de enviar a resposta para SQL Server.

Essa funcionalidade permite que o cliente VDI falhe no backup caso algo dê errado e também impede que o log de transações seja truncado por engano.

Observação Para oferecer suporte ao novo comando VDC_Complete, esta atualização também adiciona dois novos recursos VDI VDF_RequestComplete e VDF_CompleteEnabled.

Informações de atualização

Esta melhoria está incluída nas seguintes atualizações cumulativas para SQL Server:

     Atualização cumulativa 2 para SQL Server 2016 SP1

     Atualização cumulativa 4 para SQL Server 2016

Atualização cumulativa 5 para SQL Server 2012 Service Pack 3 (SP3) 

Atualização cumulativa 3 para SQL Server 2014 SP2 

Atualização cumulativa 10 para SQL Server 2014 SP1

Sobre atualizações cumulativas para o SQL Server

Sobre atualizações cumulativas para o SQL Server

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com a atualização cumulativa anterior. Consulte as atualizações cumulativas mais recentes para SQL Server:

Atualização cumulativa mais recente para o SQL Server 2016

Atualização cumulativa mais recente para o SQL Server 2014 SP1/SP2

Atualização cumulativa mais recente para o SQL Server 2012 SP3

Mais informações

Para usar o novo comando VDC_Complete, as seguintes implementações devem ser aplicadas ao seu cliente VDI:

  1. Solicite o novo recurso VDI VDF_RequestComplete. Se SQL Server suportar o comando VDC_Complete, devolverá uma resposta não NULL. Caso contrário, devolveria uma resposta NULL para a funcionalidade pedida. O exemplo de código aqui mostra como solicitar o recurso:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Determine se o SQL Server suporta o comando new VDC_Complete usando a função 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. Ao processar as mensagens VDI obtidas pela função GetCommand, adicione uma instrução case adicional para processar o comando VDC_Complete.

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

Observação A mensagem VDC_Complete deve ser incorporada ao aplicativo de backup para que ele possa usar a melhoria.

Referências

Saiba mais sobre a terminologia que a Microsoft usa para descrever atualizações de software.