KB3188454 — uzlabojums: uzlabojiet VDI protokolu ar VDC_Complete komandu programmā SQL Server

Attiecas uz
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

Uzlabojums

Pašreizējā SQL Server virtuālās dublēšanas ierīces interfeisa (VDI) protokola īstenošanā pēdējais ziņojums, kas nosūtīts no SQL Server VDI klientam, būs VDC_Flush komanda. Lai novērstu datu zudumu, VDI klientam ir jāpabeidz dublēšana, pirms reaģēt uz VDC_Flush komandu.

Sākot ar SQL Server 2008 un FILESTREAM ieviešanu, VDC_Flush komandu dublēšanas laikā var nosūtīt vairākas reizes. Šī darbība izraisa problēmu, kuras dēļ VDI klientam dublēšanas darbības laikā ir jāpabeidz dublēšana vairākas reizes. Dažiem VDI klientiem tas nav iespējams. Turklāt, ja VDI klients reaģē uz VDC_Flush komandu, nenodrošinot dublējuma pastiprināšanu, kad pēc VDC_Flush tiek saņemts vairāk datu, SQL Server var saīsināt transakciju žurnālu. Tomēr, ja dublēšana VDI klientā galu galā neizdodas un transakciju žurnāls arī tiek saīsināts, var rasties datu zudums.

Šis atjauninājums pievieno jaunu VDI komandu VDC_Complete, kas norāda, ka SQL Server ir pabeidzis sūtīt datus VDI klientam. Tādēļ VDI klients varēs pabeigt dublēšanu, pirms tas nosūta atbildi uz SQL Server.

Šī funkcionalitāte nodrošina VDI klientam dublēšanas kļūmi, ja kaut kas noiet greizi, kā arī neļauj kļūdas dēļ saīsināt transakciju žurnālu.

Piezīme Lai atbalstītu jauno VDC_Complete komandu, šajā atjauninājumā ir pievienoti arī divi jauni VDI līdzekļi VDF_RequestComplete un VDF_CompleteEnabled.

Atjaunināšanas informācija

Šis uzlabojums ir iekļauts šādos SQL Server kumulatīvajos atjauninājumos:

     SQL Server 2016 SP1 2. kumulatīvais atjauninājums

     SQL Server 2016 4. kumulatīvais atjauninājums

SQL Server 2012 3. servisa pakotnes (SP3) 5. kumulatīvais atjauninājums 

SQL Server 2014 SP2 3. kumulatīvais atjauninājums 

SQL Server 2014 SP1 10. kumulatīvais atjauninājums

Par SQL Server kumulatīvajiem atjauninājumiem

Par SQL Server kumulatīvajiem atjauninājumiem

Katrā jaunajā SQL Server kumulatīvajā atjauninājumā ir visi labojumfaili un visi drošības labojumi, kas bija iekļauti iepriekšējā kumulatīvajā atjauninājumā. Skatiet jaunākos SQL Server kumulatīvos atjauninājumus:

Jaunākais kumulatīvais atjauninājums SQL Server 2016

Jaunākais kumulatīvais atjauninājums SQL Server 2014 SP1/SP2

Jaunākais kumulatīvais atjauninājums SQL Server 2012 SP3

Papildinformācija

Lai izmantotu jauno VDC_Complete komandu, VDI klientā jālieto šādas implementācijas:

  1. Pieprasiet jauno VDI līdzekli VDF_RequestComplete. Ja SQL Server atbalsta komandu VDC_Complete, tā atgriezīs atbildi, kas nav NULL. Pretējā gadījumā pieprasītajam līdzeklim tā atgriezīs atbildi NULL. Šeit sniegtajā koda piemērā ir parādīts, kā pieprasīt attiecīgo līdzekli:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Nosakiet, vai SQL Server atbalsta jauno VDC_Complete komandu, izmantojot funkciju 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. Apstrādājot VDI ziņojumus, kas tiek iznesti, izmantojot funkciju GetCommand, pievienojiet papildu reģistra priekšrakstu, lai apstrādātu VDC_Complete komandu.

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

Piezīme VDC_Complete ziņojums ir jāiekļauj dublēšanas lietojumprogrammā, lai tā varētu izmantot uzlabojumu.

Atsauces

Uzziniet par terminoloģiju, ko Microsoft izmanto, lai aprakstītu programmatūras atjauninājumus.