KB3188454 - Покращення: удосконалення протоколу VDI за допомогою команди VDC_Complete у SQL Server

Застосовується до
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

Удосконалення

У поточній реалізації протоколу SQL Server Virtual Backup Device Interface (VDI) останнє повідомлення, надіслане від SQL Server клієнту VDI, буде командою VDC_Flush. Щоб запобігти втраті даних, клієнт VDI повинен завершити резервне копіювання, перш ніж відповісти на команду VDC_Flush.

Починаючи з SQL Server 2008 і появи FILESTREAM, VDC_Flush команду можна надсилати кілька разів під час резервного копіювання. Ця операція призводить до того, що клієнт VDI повинен кілька разів завершувати резервне копіювання під час операції резервного копіювання. Це неможливо для деяких клієнтів VDI. Крім того, якщо клієнт VDI відповідає на команду VDC_Flush, не забезпечивши посилення резервного копіювання, коли після VDC_Flush надходить більше даних, SQL Server може скоротити журнал транзакцій. Однак якщо резервне копіювання на клієнті VDI завершиться помилкою, а журнал транзакцій також буде скорочено, дані може бути втрачено.

У цьому оновленні додано новий VDC_Complete команд VDI, які вказують на те, що SQL Server завершили надсилання даних клієнту VDI. Таким чином, клієнт VDI зможе завершити резервне копіювання, перш ніж надішле відповідь на SQL ServerSQL Server.

Ця функція дозволяє клієнту VDI не виконати резервне копіювання, якщо щось піде не так, а також запобігає помилковому скороченню журналу транзакцій.

Примітка. Для підтримки нової команди VDC_Complete це оновлення також додає дві нові функції VDI VDF_RequestComplete та VDF_CompleteEnabled.

Відомості про оновлення

Це покращення входить до наведених нижче сукупних оновлень для SQL Server.

     Сукупний пакет оновлень 2 для SQL ServerSQL Server 2016 SP1

     Сукупний пакет оновлень 4 для SQL ServerSQL Server 2016

Сукупний пакет оновлень 5 для SQL Server 2012 із пакетом оновлень 3 (SP3) 

Сукупний пакет оновлень 3 для SQL ServerSQL Server 2014 SP2 

Сукупний пакет оновлень 10 для SQL ServerSQL Server 2014 SP1

Відомості про сукупні оновлення для SQL ServerSQL Server

Відомості про сукупні оновлення для SQL ServerSQL Server

Кожне нове сукупне оновлення для SQL Server містить усі виправлення та виправлення системи безпеки, які входили до попереднього сукупного пакета оновлень. Перегляньте останні сукупні оновлення для SQL Server.

Останнє сукупне оновлення для SQL ServerSQL Server 2016

Останнє сукупне оновлення для SQL ServerSQL Server 2014 SP1/SP2

Останнє сукупне оновлення для SQL ServerSQL Server 2012 SP3

Додаткові відомості

Щоб скористатися командою new VDC_Complete, до клієнта VDI слід застосувати такі реалізації:

  1. Надішліть запит на нову функцію VDI VDF_RequestComplete. Якщо SQL Server підтримує команду VDC_Complete, вона поверне відповідь не NULL. Інакше вона поверне Null-відповідь для запитаної функції. У наведеному тут прикладі коду показано, як надіслати запит на цю функцію.

    m_pvdiComponents->m_pvdConfig->features = VDF_RequestComplete;
    
    printf("Requested features to SQL Server: 0x{0:X}", m_pvdiComponents->m_pvdConfig->features);
    
  2. Визначте, чи підтримує SQL Server нову команду VDC_Complete, за допомогою функції 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. Під час обробки повідомлень VDI, отриманих функцією GetCommand, додайте додаткову інструкцію регістра для обробки команди VDC_Complete.

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

Примітка: повідомлення VDC_Complete має бути включено в програму резервного копіювання, щоб її можна було використовувати покращення.

Посилання

Дізнайтеся, за допомогою яких термінів корпорація Майкрософт описує оновлення програмного забезпечення.