KB3188454 - Miglioramento: migliorare il protocollo VDI con VDC_Complete comando in SQL Server

Si applica 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

Miglioramento

Nell'implementazione corrente del protocollo VDI (Virtual Backup Device Interface) di SQL Server, l'ultimo messaggio inviato da SQL Server al client VDI sarà un comando VDC_Flush. Per evitare la perdita di dati, il client VDI deve completare il backup prima di rispondere al comando VDC_Flush.

A partire da SQL Server 2008 e dall'introduzione di FILESTREAM, il comando VDC_Flush può essere inviato più volte durante un backup. Questa operazione causa un problema per cui il client VDI deve completare il backup più volte durante l'operazione di backup. Questo non è possibile per alcuni client VDI. Inoltre, se il client VDI risponde a un comando VDC_Flush senza verificare la protezione avanzata del backup quando sono in arrivo altri dati dopo il VDC_Flush, SQL Server potrebbe troncare il log delle transazioni. Tuttavia, se alla fine il backup non riesce nel client VDI e anche il log delle transazioni viene troncato, potrebbe verificarsi una perdita di dati.

Questo aggiornamento aggiunge un nuovo VDC_Complete di comando VDI che indica che SQL Server ha completato l'invio dei dati al client VDI. Pertanto, il client VDI sarà in grado di completare il backup prima di inviare la risposta a SQL Server.

Questa funzionalità consente al client VDI di non riuscire a eseguire il backup nel caso in cui si verifichi un errore, impedendo inoltre che il log delle transazioni venga troncato per errore.

Nota: per supportare il nuovo comando VDC_Complete, questo aggiornamento aggiunge anche due nuove funzionalità VDI, VDF_RequestComplete e VDF_CompleteEnabled.

Informazioni sull'aggiornamento

Questo miglioramento è incluso nei seguenti aggiornamenti cumulativi per SQL Server:

     Aggiornamento cumulativo 2 per SQL Server 2016 SP1

     Aggiornamento cumulativo 4 per SQL Server 2016

Aggiornamento cumulativo 5 per SQL Server 2012 Service Pack 3 (SP3) 

Aggiornamento cumulativo 3 per SQL Server 2014 SP2 

Aggiornamento cumulativo 10 per SQL Server 2014 SP1

Informazioni sugli aggiornamenti cumulativi per SQL Server

Informazioni sugli aggiornamenti cumulativi per SQL Server

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutte le correzioni rapide e di sicurezza incluse nell'aggiornamento cumulativo precedente. Vedere gli aggiornamenti cumulativi più recenti per SQL Server:

Aggiornamento cumulativo più recente per SQL Server 2016

Aggiornamento cumulativo più recente per SQL Server 2014 SP1/SP2

Aggiornamento cumulativo più recente per SQL Server 2012 SP3

Altre informazioni

Per usare il nuovo comando VDC_Complete, è necessario applicare le implementazioni seguenti al client VDI:

  1. Richiedere la nuova funzionalità VDI VDF_RequestComplete. Se SQL Server supporta il comando VDC_Complete, restituirà una risposta not NULL. In caso contrario, restituirebbe una risposta NULL per la funzionalità richiesta. L'esempio di codice seguente mostra come richiedere la funzionalità:

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Determinare se il server SQL supporta il nuovo comando VDC_Complete usando la funzione 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. Quando si elaborano i messaggi VDI recuperati dalla funzione GetCommand, aggiungere un'istruzione case aggiuntiva per elaborare il comando VDC_Complete.

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

Nota: il messaggio VDC_Complete deve essere incorporato nell'applicazione di backup in modo che possa utilizzare il miglioramento.

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.