KB3188454 - 개선: SQL Server에서 VDC_Complete 명령을 사용하여 VDI 프로토콜 향상

적용 대상
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 VDI(가상 백업 장치 인터페이스) 프로토콜의 현재 구현에서는 SQL Server에서 VDI 클라이언트로 전송된 마지막 메시지가 VDC_Flush 명령이 됩니다. 데이터 손실을 방지하려면 VDI 클라이언트가 VDC_Flush 명령에 응답하기 전에 백업을 완료해야 합니다.

2008 SQL Server 및 FILESTREAM이 도입된 이후부터 백업 중에 VDC_Flush 명령을 여러 번 보낼 수 있습니다. 이 작업으로 인해 VDI 클라이언트가 백업 작업 중에 백업을 여러 번 완료해야 하는 문제가 발생합니다. 일부 VDI 클라이언트에서는 이것이 불가능합니다. 또한 VDI 클라이언트가 VDC_Flush 후 더 많은 데이터가 들어올 때 백업이 강화되었는지 확인하지 않고 VDC_Flush 명령에 응답하면 SQL Server 트랜잭션 로그가 잘릴 수 있습니다. 그러나 VDI 클라이언트에서 백업이 결국 실패하고 트랜잭션 로그도 잘리면 데이터 손실이 발생할 수 있습니다.

이 업데이트는 SQL Server VDI 클라이언트로 데이터 전송을 완료했음을 나타내는 새 VDI 명령 VDC_Complete를 추가합니다. 따라서 VDI 클라이언트는 SQL Server에 응답을 보내기 전에 백업을 완료할 수 있습니다.

이 기능을 사용하면 문제가 발생할 경우 VDI 클라이언트가 백업에 실패할 수 있으며 실수로 트랜잭션 로그가 잘리는 것을 방지할 수 있습니다.

참고 새 VDC_Complete 명령을 지원하기 위해 이 업데이트는 두 가지 새로운 VDI 기능(VDF_RequestComplete 및 VDF_CompleteEnabled)도 추가합니다.

업데이트 정보

이 개선 사항은 SQL Server에 대한 다음 누적 업데이트에 포함되어 있습니다.

     SQL Server 2016 SP1용 누적 업데이트 2

     SQL Server 2016용 누적 업데이트 4

SQL Server 2012 SP3(서비스 팩 3)용 누적 업데이트 5 

SQL Server 2014 SP2용 누적 업데이트 3 

SQL Server 2014 SP1용 누적 업데이트 10

SQL Server의 누적 업데이트 정보

SQL Server의 누적 업데이트 정보

SQL Server에 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스와 모든 보안 수정 사항이 포함되어 있습니다. SQL Server에 대한 최신 누적 업데이트를 확인하세요.

SQL Server 2016용 최신 누적 업데이트

SQL Server 2014 SP1/SP2용 최신 누적 업데이트

SQL Server 2012 SP3용 최신 누적 업데이트

추가 정보

새 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. GetConfiguration 함수를 사용하여 SQL Server이 새 VDC_Complete 명령을 지원하는지 여부를 확인합니다.

    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. GetCommand 함수에서 가져온 VDI 메시지를 처리할 때 VDC_Complete 명령을 처리하는 추가 case 문을 추가합니다.

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

참고 VDC_Complete 메시지는 개선 사항을 사용할 수 있도록 백업 응용 프로그램에 통합되어야 합니다.

참조 자료

Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아보세요.