Verbesserung
In der aktuellen Implementierung des SQL Server VDI-Protokolls (Virtual Backup Device Interface) ist die letzte Nachricht, die von SQL Server an den VDI-Client gesendet wird, ein VDC_Flush-Befehl. Um Datenverluste zu verhindern, muss der VDI-Client die Sicherung abschließen, bevor er auf den Befehl VDC_Flush reagiert.
Seit SQL Server 2008 und der Einführung von FILESTREAM kann der Befehl VDC_Flush während eines Backups mehrfach gesendet werden. Dieser Vorgang verursacht das Problem, dass der VDI-Client die Sicherung während des Sicherungsvorgangs mehrmals abschließen muss. Dies ist für einige VDI-Clients nicht möglich. Wenn der VDI-Client auf einen VDC_Flush-Befehl reagiert, ohne sicherzustellen, dass die Sicherung gesichert ist, wenn nach dem VDC_Flush mehr Daten kommen, kann SQL Server das Transaktionsprotokoll abschneiden. Wenn die Sicherung auf dem VDI-Client jedoch letztendlich fehlschlägt und das Transaktionsprotokoll ebenfalls abgeschnitten wird, kann es zu einem Datenverlust kommen.
Dieses Update fügt einen neuen VDI-Befehl VDC_Complete hinzu, der angibt, dass SQL Server das Senden von Daten an den VDI-Client abgeschlossen hat. Daher kann der VDI-Client die Sicherung abschließen, bevor er eine Antwort an SQL Server sendet.
Diese Funktionalität ermöglicht es dem VDI-Client, die Sicherung fehlschlagen zu lassen, falls etwas schief geht, und verhindert auch, dass das Transaktionsprotokoll versehentlich abgeschnitten wird.
Hinweis: Um den neuen VDC_Complete-Befehl zu unterstützen, fügt dieses Update auch zwei neue VDI-Funktionen hinzu: VDF_RequestComplete und VDF_CompleteEnabled.
Informationen zum Update
Diese Verbesserung ist in den folgenden kumulativen Updates für SQL Server enthalten:
Kumulatives Update 2 für SQL Server 2016 SP1
Kumulatives Update 4 für SQL Server 2016
Kumulatives Update 5 für SQL Server 2012 Service Pack 3 (SP3)
Kumulatives Update CU 3 für SQL Server 2014 SP2
Kumulatives Update 10 für SQL Server 2014 SP1
Informationen zu kumulativen Updates für SQL Server
Informationen zu kumulativen Updates für SQL Server
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:
Neuestes kumulative Update für SQL Server 2016
Neuestes kumulatives Update für SQL Server 2014 SP1/SP2
Neuestes kumulatives Update für SQL Server 2012 SP3
Weitere Informationen
Um den neuen Befehl VDC_Complete verwenden zu können, müssen die folgenden Implementierungen auf Ihren VDI-Client angewendet werden:
Fordern Sie das neue VDI-Feature VDF_RequestComplete an. Wenn SQL Server den Befehl VDC_Complete unterstützt, wird eine NULL-Antwort zurückgegeben. Andernfalls würde sie eine NULL-Antwort für das angeforderte Feature zurückgeben. Das folgende Codebeispiel zeigt, wie Sie das Feature anfordern:
m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete; printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);Ermitteln Sie mithilfe der GetConfiguration-Funktion, ob der SQL Server den neuen VDC_Complete-Befehl unterstützt.
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; }Wenn Sie die VDI-Nachrichten verarbeiten, die von der GetCommand-Funktion abgerufen werden, fügen Sie eine zusätzliche Case-Anweisung hinzu, um den VDC_Complete-Befehl zu verarbeiten.
case VDC_Complete: // Close the media and ensure that book keeping is completed. backupMedia->Close(); completionCode = ERROR_SUCCESS; break;
Hinweis Die VDC_Complete Nachricht muss in die Backup-Anwendung integriert werden, damit diese die Verbesserung nutzen kann.
Referenzmaterial
Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.