병합 복제 개요

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

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

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

  • 구독자는 데이터를 받아 오프라인 상태에서 변경하여 나중에 게시자 및 다른 구독자와 변경 내용을 동기화해야 합니다.

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

  • 충돌이 발생할 수 있으며 충돌이 발생하면 충돌을 감지하여 해결할 수 있어야 합니다.

  • 응용 프로그램이 중간 데이터 상태가 아닌 순수한 데이터 변경 내용만 필요로 합니다. 예를 들어 구독자가 게시자와 동기화하기 전에 구독자에서 행이 5번 변경된 경우 게시자에서는 행이 한 번만 변경되어 최종 데이터 변경 내용(5번째 값)을 반영합니다.

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

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

병합 복제 구현 방법은 디자인 및 구현(복제)을 참조하십시오.

병합 복제와 관련된 일반 시나리오에 대한 자세한 내용은 서버 및 클라이언트 간 데이터 복제를 참조하십시오.