KB3188454 - Verbetering: het VDI-protocol uitbreiden met VDC_Complete opdracht in SQL Server

Van toepassing op
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

Verbetering

In de huidige implementatie van het SQL Server VDI-protocol (Virtual Backup Device Interface) is het laatste bericht dat van SQL Server naar de VDI-client wordt verzonden een VDC_Flush-opdracht. Om gegevensverlies te voorkomen, moet de VDI-client de back-up voltooien voordat op de opdracht van de VDC_Flush kan worden gereageerd.

Vanaf SQL Server 2008 en de introductie van FILESTREAM kan het VDC_Flush commando meerdere keren worden verzonden tijdens een back-up. Deze bewerking veroorzaakt een probleem dat de VDI-client de back-up meerdere keren moet voltooien tijdens de back-upbewerking. Voor sommige VDI-clients is dit niet mogelijk. Als de VDI-client reageert op een VDC_Flush-opdracht zonder ervoor te zorgen dat de back-up wordt beveiligd wanneer er meer gegevens na de VDC_Flush komen, kan SQL Server het transactielogboek afkappen. Als de back-up echter uiteindelijk mislukt op de VDI-client en het transactielogboek ook wordt afgekapt, kan er gegevensverlies optreden.

Deze update voegt een nieuwe VDI-opdracht toe VDC_Complete die aangeeft dat SQL Server klaar is met het verzenden van gegevens naar de VDI-client. Hierdoor kan de VDI-client de back-up voltooien voordat het antwoord naar SQL Server wordt verzonden.

Met deze functionaliteit kan de VDI-client de back-up mislukken als er iets misgaat, en wordt ook voorkomen dat het transactielogboek per ongeluk wordt afgekapt.

Opmerking Ter ondersteuning van de nieuwe opdracht VDC_Complete worden met deze update ook twee nieuwe VDI-functies VDF_RequestComplete en VDF_CompleteEnabled toegevoegd.

Informatie over de update

Deze verbetering is opgenomen in de volgende cumulatieve updates voor SQL Server:

     Cumulatieve update 2 voor SQL Server 2016 SP1

     Cumulatieve update 4 voor SQL Server 2016

Cumulatieve update 5 voor SQL Server 2012 Service Pack 3 (SP3) 

Cumulatieve update 3 voor SQL Server 2014 SP2 

Cumulatieve update 10 voor SQL Server 2014 SP1

Informatie over cumulatieve updates voor SQL Server

Informatie over cumulatieve updates voor SQL Server

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingspatches die deel uitmaakten van de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:

Meest recente cumulatieve update voor SQL Server 2016

Meest recente cumulatieve update voor SQL Server 2014 SP1/SP2

Meest recente cumulatieve update voor SQL Server 2012 SP3

Meer informatie

Als je de nieuwe opdracht VDC_Complete wilt gebruiken, moeten de volgende implementaties worden toegepast op je VDI-client:

  1. Vraag de nieuwe VDI-functie VDF_RequestComplete aan. Als SQL Server de opdracht VDC_Complete ondersteunt, wordt er een niet-NULL-antwoord geretourneerd. Anders wordt een NULL-antwoord geretourneerd voor de aangevraagde functie. In dit codevoorbeeld ziet u hoe u de functie kunt aanvragen:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Controleer of de SQL Server de nieuwe opdracht VDC_Complete ondersteunt met behulp van de functie 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. Wanneer u de VDI-berichten verwerkt die worden opgehaald door de functie GetCommand, voegt u een extra case-instructie toe om de opdracht VDC_Complete te verwerken.

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

Opmerking: het VDC_Complete bericht moet worden opgenomen in de back-uptoepassing, zodat de verbetering kan worden gebruikt.

Meer informatie

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.