다음을 통해 공유


고급 병합 복제 - 충돌 검색 및 해결

적용 대상: SQL Server

게시자와 구독자가 연결되고 동기화가 이루어지면 병합 에이전트는 충돌이 있는지 감지합니다. 충돌이 감지되면 병합 에이전트는 충돌 해결 프로그램(문서가 게시물에 추가될 때 지정됨)을 사용해서 다른 사이트로 수락 및 전파하는 데이터를 확인합니다.

병합 복제는 충돌을 감지하고 해결하는 다양한 방법을 제공합니다. 대부분의 애플리케이션에는 기본 방법이 적합합니다.

  • 게시자와 구독자 간에 충돌이 발생하면 게시자 변경 내용이 유지되고 구독자 변경 내용이 삭제됩니다.
  • 클라이언트 구독(끌어오기 구독의 기본 형식)을 사용하는 두 구독자 간에 충돌이 발생하면 첫 번째 구독자에서 게시자와 동기화하도록 변경된 내용이 유지되고 두 번째 구독자의 변경 내용이 삭제됩니다. 클라이언트와 서버 구독을 지정하는 방법에 대한 자세한 내용은 병합 구독 유형 및 충돌 해결 우선 순위 지정(SQL Server Management Studio)을 참조하세요.
  • 서버 구독(밀어넣기 구독의 기본 형식)을 사용하는 두 구독자 간에 충돌이 발생하면 우선 순위가 가장 높은 구독자의 변경 내용이 유지되고 두 번째 구독자의 변경 내용이 삭제됩니다. 우선 순위 값이 같으면 게시자와 동기화할 첫 번째 구독자에서 변경 내용이 유지됩니다.

참고 항목

구독자와 게시자가 동기화되는 경우에도 충돌은 대체로 구독자 및 게시자에서 수행되는 업데이트가 아닌 여러 구독자에서 수행되는 업데이트 사이에서 발생합니다.

충돌 검색 및 해결 동작은 이 항목에 설명된 다음 옵션에 따라 달라집니다.

  • 열 수준 추적, 행 수준 추적 또는 논리적 레코드 수준 추적을 지정하는지 여부입니다.

  • 기본 우선 순위 기반 해결 메커니즘을 지정하거나 아티클 확인 프로그램을 지정할지 여부입니다. 아티클 확인 프로그램은 다음과 같습니다.

    • 관리 코드로 작성된 비즈니스 논리 처리기입니다.
    • COM 기반 사용자 지정 해결 프로그램.
    • Microsoft에서 제공하는 COM 기반 해결 프로그램입니다.

    기본 해결 메커니즘을 사용하는 경우 동작은 사용되는 구독 유형(클라이언트 또는 서버)에 따라 추가로 결정됩니다.

충돌 감지

데이터 변경이 충돌로 규정되는지 여부는 아티클에 대해 설정한 충돌 추적 유형에 따라 달라집니다.

  • 열 수준 충돌 추적을 선택하면 둘 이상의 복제 노드에서 동일한 행의 동일한 열이 변경되는 경우 충돌로 간주됩니다.
  • 행 수준 추적을 선택하면 둘 이상의 복제 노드에서 동일 행의 열이 변경되는 경우 충돌로 간주됩니다(해당하는 행에 영향을 받는 열이 동일할 필요는 없습니다).
  • 논리적 레코드 수준 추적을 선택하면 둘 이상의 복제 노드에서 동일 행의 열이 변경되는 경우 충돌로 간주됩니다(해당하는 행에 영향을 받는 열이 동일할 필요는 없습니다).

자세한 내용은 논리적 레코드에서 충돌 감지 및 해결을 참조하세요.

아티클에 대한 충돌 추적 및 해결 수준을 지정하려면 병합 복제 속성 지정을 참조하세요.

충돌 해결

충돌이 감지되면 병합 에이전트는 선택한 충돌 해결 프로그램을 시작하고 해결 프로그램을 사용하여 충돌 시 적용되는 내용을 확인합니다. 우위 행은 게시자 및 구독자에 적용되며 손실된 행의 데이터는 충돌 테이블에 기록됩니다. 충돌을 대화형으로 해결하기 위해 선택하지 않는 한 해결 프로그램을 실행한 직후에 충돌이 해결됩니다.

병합 복제 충돌 해결

적용 대상: SQL Server

게시자와 구독자가 연결되고 동기화가 이루어지면 병합 에이전트는 충돌이 있는지 감지합니다. 충돌이 감지되면 병합 에이전트는 충돌 해결 프로그램을 사용해서 다른 사이트로 수락 및 전파할 데이터를 확인합니다.

참고 항목

구독자와 게시자가 동기화되는 경우에도 충돌은 대체로 구독자 및 게시자에서 수행되는 업데이트 보다는 여러 구독자에서 수행되는 업데이트 사이에서 발생합니다.

병합 복제는 충돌을 감지하고 해결하는 다양한 방법을 제공합니다. 대부분의 애플리케이션에는 기본 방법이 적합합니다.

  • 게시자와 구독자 간에 충돌이 발생하면 게시자 변경 내용이 유지되고 구독자 변경 내용이 삭제됩니다.

  • 클라이언트 구독(끌어오기 구독의 기본 형식)을 사용하는 두 구독자 간에 충돌이 발생하면 첫 번째 구독자에서 게시자와 동기화하도록 변경된 내용이 유지되고 두 번째 구독자의 변경 내용이 삭제됩니다. 클라이언트와 서버 구독을 지정하는 방법에 대한 자세한 내용은 병합 구독 유형 및 충돌 해결 우선 순위 지정(SQL Server Management Studio)을 참조하세요.

  • 서버 구독(밀어넣기 구독의 기본 형식)을 사용하는 두 구독자 간에 충돌이 발생하면 우선 순위가 가장 높은 구독자의 변경 내용이 유지되고 두 번째 구독자의 변경 내용이 삭제됩니다. 우선 순위 값이 같으면 게시자와 동기화할 첫 번째 구독자에서 변경 내용이 유지됩니다.

병합 복제에 대한 충돌 검색 및 해결에 대한 자세한 내용은 고급 병합 복제 충돌 검색 및 해결을 참조하십시오.

해결 프로그램 형식

병합 복제에서 충돌 해결은 아티클 수준에서 수행됩니다. 여러 아티클로 구성된 게시물의 경우 다른 아티클을 제공하는 다른 충돌 해결 프로그램 또는 하나의 아티클, 여러 아티클 또는 게시로 구성된 모든 아티클을 제공하는 동일한 충돌 해결자를 포함할 수 있습니다.

기본 우선 순위 기반 충돌 해결 프로그램을 사용하려는 경우 아티클의 해결 프로그램 속성을 설정할 필요가 없습니다. 기본 해결 프로그램 대신 아티클 해결 프로그램을 사용하려면 게시자에서 사용 가능한 해결 프로그램을 선택하여 해당 해결 프로그램이 사용될 아티클에 대해 해결 프로그램 속성을 설정해야 합니다. 해결 프로그램으로 전달되어야 하는 모든 특정 정보는 해결 프로그램 정보 속성에서 지정할 수도 있습니다.

병합 복제는 다음 4가지 유형의 충돌 해결 프로그램을 제공합니다.

  • 기본 우선 순위 기반 충돌 해결 프로그램

    기본 해결 프로그램의 메커니즘은 구독이 클라이언트 구독인지 서버 구독인지에 따라 다르게 행동합니다. 서버 구독을 사용하는 개별 구독자에게 우선 순위 값을 할당하며 우선 순위가 가장 높은 노드의 변경 내용이 충돌 시 적용됩니다. 클라이언트 구독의 경우 게시자에 작성된 첫 번째 변경 내용이 충돌 시 적용됩니다.

    구독을 만든 후에는 한 형식에서 다른 형식으로 변경할 수 없습니다.

  • 비즈니스 논리 처리기

    비즈니스 논리 처리기 프레임워크로 병합 동기화 과정 동안 호출되는 관리 코드 어셈블리를 작성할 수 있습니다. 어셈블리에는 동기화 중에 충돌 및 기타 여러 조건에 대응할 수 있는 비즈니스 논리가 포함됩니다. 자세한 내용은 병합 동기화 중 비즈니스 논리 실행을 참조하세요.

  • COM 기반 사용자 지정 해결 프로그램

    병합 복제는 Microsoft Visual C++ 또는 Microsoft Visual Basic과 같은 언어로 해결 프로그램을 COM 개체로 쓰기 위한 API를 제공합니다. 자세한 내용은 COM 기반 해결 프로그램을 참조하세요.

  • Microsoft에서 제공하는 COM 기반 해결 프로그램

    Microsoft SQL Server에는 많은 COM 기반 해결 프로그램이 포함되어 있습니다. 자세한 내용은 Microsoft COM 기반 해결 프로그램을(를) 참조하세요.

적절한 해결 프로그램 유형을 선택하는 방법에 대한 자세한 내용은 해결 프로그램 선택을 참조하세요.

참고 항목

일부 아티클 해결 프로그램은 특정 작업에 대해서만 충돌을 처리하도록 작성됩니다. 예를 들어 해결 프로그램은 업데이트를 처리할 수 있지만 삽입이나 삭제를 하진 않습니다. 기본 우선 순위 기반 충돌 해결 프로그램은 아티클 해결 프로그램에서 처리하지 않는 충돌을 처리합니다.

병합 구독 유형 및 충돌 해결 우선 순위 지정

대화형 해결 프로그램

복제는 기본 우선 순위 기반 충돌 해결 프로그램이나 아티클 해결 프로그램과 함께 사용할 수 있는 대화형 해결 프로그램 사용자 인터페이스를 제공합니다. Microsoft Windows 동기화 관리자를 통해 주문형 동기화를 수행할 때 대화형 해결 프로그램은 런타임에 충돌 데이터를 표시하고 충돌을 해결하는 방법을 선택할 수 있습니다. 대화형 해결을 사용하도록 설정하고 대화형 해결 프로그램을 시작하는 방법에 대한 자세한 내용은 대화형 충돌 해결을 참조하세요.

충돌 보기

충돌을 보는 가장 간단한 방법은 SQL Server Management Studio에서 사용할 수 있는 복제 충돌 뷰어를 사용하는 것입니다(SQL Server는 충돌 테이블을 쿼리할 수 있는 저장 프로시저도 제공합니다.). 충돌 뷰어와 대화형 해결 프로그램도 비슷한 도구이지만 대화형 해결 프로그램을 사용하면 동기화가 발생할 때 충돌을 해결할 수 있는 반면 충돌 뷰어는 해결된 후 충돌을 볼 수 있도록 설계되었습니다. 충돌 메타데이터를 시스템 테이블에서 계속 사용할 수 있는 경우(충돌 메타데이터는 기본적으로 14일 동안 유지됨) 충돌 뷰어에서 충돌 해결 결과를 재정의할 수 있지만, 직접 개입이 정기적으로 필요한 경우 대화형 해결 프로그램을 사용하는 것이 좋습니다.

참고 항목

논리적 레코드와 관련된 충돌은 충돌 뷰어에 표시되지 않습니다. 이러한 충돌에 대한 정보를 보려면 복제 저장 프로시저를 사용합니다. 자세한 내용은 병합 게시에 대한 충돌 정보 보기(복제 Transact-SQL 프로그래밍)를 참조하세요.

충돌 뷰어는 다음 세 가지 시스템 테이블의 정보를 표시합니다.

  • 복제는 병합 아티클의 각 테이블에 대한 충돌 테이블을 만듭니다. 이 테이블의 이름은 MSmerge_conflict_<PublicationName>_<ArticleName> 형식입니다.

    충돌 테이블은 기반이 되는 테이블과 동일한 구조를 갖습니다. 이러한 테이블 중 하나의 행은 손실된 버전의 충돌 행으로 구성됩니다(행의 승리 버전은 실제 사용자 테이블에 있습니다).

  • MSmerge_conflicts_info 테이블은 충돌 유형을 포함하여 각 충돌에 대한 정보를 제공합니다.

  • sysmergearticles 테이블은 충돌 테이블이 있는 사용자 테이블을 식별하고 충돌 테이블에 대한 정보를 제공합니다.

기본값으로, 충돌 정보는 저장됩니다.

  • 게시자 및 구독자에서 게시 호환성 수준이 90RTM 이상인 경우.

  • 게시자에서 게시 호환성 수준이 80RTM보다 낮은 경우.

  • 게시자에서 구독자가 SQL Server Compact를 실행하는 경우. 충돌 데이터는 SQL Server Compact 구독자에 저장할 수 없습니다.

충돌을 보려면