KB3188454 – forbedring: Forbedre VDI-protokollen med VDC_Complete kommando i SQL Server

Gjelder for
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

Forbedring

I den gjeldende implementeringen av SQL Server Virtual Backup Device Interface-protokollen (VDI) vil den siste meldingen som sendes fra SQL Server til VDI-klienten, være en VDC_Flush-kommando. VDI-klienten må fullføre sikkerhetskopieringen før den svarer på VDC_Flush-kommandoen for å unngå tap av data.

Fra og med SQL Server 2008 og innføringen av FILESTREAM kan VDC_Flush kommandoen sendes flere ganger under en sikkerhetskopiering. Denne operasjonen fører til et problem som gjør at VDI-klienten må fullføre sikkerhetskopieringen flere ganger under sikkerhetskopieringen. Dette er ikke mulig for enkelte VDI-klienter. Hvis VDI-klienten i tillegg svarer på en VDC_Flush-kommando uten å sikre at sikkerhetskopien er herdet når det kommer mer data etter VDC_Flush, kan SQL Server avkorte transaksjonsloggen. Hvis sikkerhetskopieringen til slutt mislykkes på VDI-klienten, og transaksjonsloggen også avkortes, kan det imidlertid oppstå tap av data.

Denne oppdateringen legger til en ny VDI-kommando VDC_Complete som angir at SQL Server er ferdig med å sende data til VDI-klienten. VDI-klienten kan derfor fullføre sikkerhetskopieringen før den sender svar til SQL Server.

Denne funksjonaliteten gjør at VDI-klienten mislykkes i sikkerhetskopieringen i tilfelle noe går galt, og forhindrer også at transaksjonsloggen blir avkortet ved en feiltakelse.

Obs! Denne oppdateringen legger også til to nye VDI-funksjoner VDF_RequestComplete og VDF_CompleteEnabled for å støtte den nye VDC_Complete-kommandoen.

Oppdateringsinformasjon

Denne forbedringen er inkludert i følgende kumulative oppdateringer for SQL Server:

     Kumulativ oppdatering 2 for SQL Server 2016 SP1

     Kumulativ oppdatering 4 for SQL Server 2016

Kumulativ oppdatering 5 for SQL Server 2012 Service Pack 3 (SP3) 

Kumulativ oppdatering 3 for SQL Server 2014 SP2 

Kumulativ oppdatering 10 for SQL Server 2014 SP1

Om kumulative oppdateringer for SQL Server

Om kumulative oppdateringer for SQL Server

Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Ta en titt på de nyeste kumulative oppdateringene for SQL Server:

Den nyeste kumulative oppdateringen for SQL Server 2016

Den nyeste kumulative oppdateringen for SQL Server 2014 SP1/SP2

Den nyeste kumulative oppdateringen for SQL Server 2012 SP3

Mer informasjon

Hvis du vil bruke kommandoen ny VDC_Complete, må følgende implementeringer brukes på VDI-klienten:

  1. Be om den nye VDI-funksjonen VDF_RequestComplete. Hvis SQL Server støtter VDC_Complete-kommandoen, returneres et ikke NULL-svar. Ellers ville den returnert et NULL-svar for den forespurte funksjonen. Kodeeksemplet her viser hvordan du ber om funksjonen:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Fastslå om SQL Server støtter kommandoen ny VDC_Complete ved hjelp av GetConfiguration-funksjonen.

    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. Når du behandler VDI-meldingene som hentes av GetCommand-funksjonen, legger du til en setning om ekstra bokstavtype for å behandle VDC_Complete-kommandoen.

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

Obs! Den VDC_Complete meldingen må innlemmes i sikkerhetskopieringsprogrammet slik at det kan bruke forbedringen.

Kilder

Finn ut mer om terminologien som Microsoft bruker til å beskrive programvareoppdateringer.