다음을 통해 공유


병합 복제

적용 대상: SQL Server

병합 복제는 트랜잭션 복제처럼 일반적으로 게시 데이터베이스 개체 및 데이터의 스냅샷으로 시작됩니다. 게시자 및 구독자에서 수행한 후속 데이터 변경 및 스키마 수정은 트리거를 사용하여 추적됩니다. 구독자는 네트워크에 연결될 때 게시자와 동기화하여 마지막 동기화 이후 게시자와 구독자 간에 변경된 모든 행을 교환합니다.

병합 복제는 일반적으로 서버-클라이언트 환경에서 사용됩니다. 병합 복제는 다음과 같은 경우에 적합합니다.

  • 여러 구독자가 여러 번 동일한 데이터를 업데이트하고 해당 변경 내용을 게시자 및 다른 구독자에게 전파할 수 있습니다.

  • 구독자는 데이터를 받고, 오프라인으로 변경하고, 나중에 변경 내용을 게시자 및 기타 구독자와 동기화해야 합니다.

  • 각 구독자에는 다른 데이터 파티션이 필요합니다.

  • 충돌이 발생할 수 있으며, 충돌이 발생할 경우 이를 감지하고 해결할 수 있는 기능이 필요합니다.

  • 애플리케이션에는 중간 데이터 상태에 액세스하는 대신 순 데이터 변경이 필요합니다. 예를 들어 행이 게시자와 동기화되기 전에 구독자에서 5번 변경되는 경우, 행은 게시자에서 한 번만 변경되어 순 데이터 변경(즉, 다섯 번째 값)을 반영합니다.

병합 복제를 사용하면 다양한 사이트가 자율적으로 작동하고 나중에 업데이트를 단일 균일한 결과로 병합할 수 있습니다. 업데이트는 둘 이상의 노드에서 수행되므로 게시자 및 둘 이상의 구독자가 같은 데이터를 업데이트할 수 있습니다. 따라서 업데이트가 병합될 때 충돌이 발생할 수 있으며 병합 복제는 충돌을 처리하는 다양한 방법을 제공합니다.

병합 복제는 SQL Server 스냅샷 에이전트 및 병합 에이전트 의해 구현됩니다. 게시가 필터링되지 않거나 정적 필터를 사용하는 경우 스냅샷 에이전트가 단일 스냅샷을 만듭니다. 게시에서 매개 변수가 있는 필터를 사용하는 경우 스냅샷 에이전트가 데이터의 각 파티션에 대한 스냅샷을 만듭니다. 병합 에이전트 초기 스냅샷을 구독자에 적용합니다. 또한 초기 스냅샷이 만들어진 후 게시자 또는 구독자에서 발생한 증분 데이터 변경 내용을 병합하고 사용자가 구성한 규칙에 따라 충돌을 감지하고 해결합니다.

변경 내용을 추적하기 위해 병합 복제와 지연 업데이트 구독이 있는 트랜잭션 복제는 게시된 모든 테이블에 있는 모든 행을 고유하게 식별할 수 있어야 합니다. 이 병합 복제를 수행하려면 ROWGUIDCOL 속성이 설정된 데이터 형식 uniqueidentifier 열이 테이블에 이미 없는 경우(이 열이 사용되는 경우) 모든 테이블에 열 rowguid를 추가합니다. 테이블을 게시에서 삭제하면 rowguid 열이 제거되고 기존 열을 추적에 사용한 경우 열이 제거되지 않습니다. 필터는 행 식별을 위해 복제에 사용된 rowguidcol 을 포함하지 않아야 합니다. newid() 함수는 rowguid 열에 대한 기본값으로 제공되지만 고객은 필요한 경우 각 행에 대한 GUID를 제공할 수 있습니다. 그러나 00000000-0000-0000-0000-000000000000 값은 제공하지 마세요.

다음 다이어그램에서는 병합 복제에 사용되는 구성 요소를 보여 줍니다.

병합 복제 구성 요소 및 데이터 흐름