고급 병합 복제 - 충돌 감지 및 해결Advanced Merge Replication - Conflict Detection and Resolution

게시자와 구독자가 연결되고 동기화가 이루어지면 병합 에이전트는 충돌이 있는지 감지합니다.When a Publisher and a Subscriber are connected and synchronization occurs, the Merge Agent detects if there are any conflicts. 충돌이 감지되면 병합 에이전트는 게시에 아티클을 추가할 때 지정한 충돌 해결 프로그램을 사용해서 수락하여 다른 사이트로 전파할 데이터를 확인합니다.If conflicts are detected, the Merge Agent uses a conflict resolver (which is specified when an article is added to a publication) to determine which data is accepted and propagated to other sites.

참고

구독자와 게시자가 동기화되는 경우에도 충돌은 대체로 구독자 및 게시자에서 수행되는 업데이트가 아닌 여러 구독자에서 수행되는 업데이트 사이에서 발생합니다.Although a Subscriber synchronizes with the Publisher, conflicts typically occur between updates that are made at different Subscribers, instead of updates being made at a Subscriber and at the Publisher.

충돌 감지 및 해결 동작은 다음 옵션에 따라 결정됩니다.The behavior of conflict detection and resolution depends on the following options, which are described in this topic:

  • 열 수준 추적, 행 수준 추적 또는 논리적 레코드 수준 추적 지정Whether you specify column-level tracking, row-level tracking, or logical record-level tracking.

  • 기본 우선 순위 기반 해결 메커니즘 또는 아티클 해결 프로그램 지정.Whether you specify the default priority-based resolution mechanism or specify an article resolver. 아티클 해결 프로그램은 다음 중 하나일 수 있습니다.An article resolver can be:

    • 관리 코드로 작성된 비즈니스 논리 처리기A business logic handler written in managed code.

    • COM 기반 사용자 지정 해결 프로그램A COM-based custom resolver.

    • MicrosoftMicrosoft에서 제공하는 COM 기반 해결 프로그램A COM-based resolver supplied by MicrosoftMicrosoft.

      기본 해결 메커니즘을 사용하는 경우 구독 유형이 클라이언트인지 또는 서버인지에 따라 동작이 추가로 결정됩니다.If the default resolution mechanism is used, behavior is further determined by the type of subscription used: client or server.

충돌 감지Conflict Detection

데이터 변경의 충돌 여부는 아티클에 대해 설정한 충돌 추적 유형에 따라 결정됩니다.Whether a data change qualifies as a conflict or not depends on the type of conflict tracking you set for an article:

  • 열 수준 충돌 추적을 선택하면 둘 이상의 복제 노드에서 동일한 행의 동일한 열이 변경되는 경우 충돌로 간주됩니다.If you select column-level conflict tracking, it is considered a conflict if changes are made to the same column in the same row at more than one replication node.

  • 행 수준 추적을 선택하면 둘 이상의 복제 노드에서 동일한 행의 임의 열이 변경되는 경우 충돌로 간주됩니다. 해당 행에서 영향을 받는 열이 동일할 필요는 없습니다.If you select row-level tracking, it is considered a conflict if changes are made to any columns in the same row at more than one replication node (the columns affected in the corresponding rows need not be the same).

  • 논리적 레코드 수준 추적을 선택하면 둘 이상의 복제 노드에서 동일한 논리적 레코드의 임의 행이 변경되는 경우 충돌로 간주됩니다. 해당 행에서 영향을 받는 열이 동일할 필요는 없습니다.If you select logical record-level tracking, it is considered a conflict if changes are made to any row in the same logical record at more than one replication node (the columns affected in the corresponding rows need not be the same).

    자세한 내용은 논리적 레코드에서 충돌 감지 및 해결을 참조하세요.For more information, see Detecting and Resolving Conflicts in Logical Records.

    아티클의 충돌 추적 및 해결 수준을 지정하려면 병합 아티클에 대 한 충돌 추적 및 해결 수준 지정을 참조하십시오.To specify the conflict tracking and resolution level for an article, see Specify the Conflict Tracking and Resolution Level for Merge Articles.

충돌 해결Conflict Resolution

충돌이 감지되면 병합 에이전트는 선택한 충돌 해결 프로그램을 시작하고 해결 프로그램을 사용하여 충돌 시 적용되는 내용을 확인합니다.After a conflict is detected, the Merge Agent launches the selected conflict resolver and uses the resolver to determine the conflict winner. 적용되는 행이 게시자 및 구독자에서 적용되며 무시되는 행의 데이터는 충돌 테이블에 기록됩니다.The winning row is applied at the Publisher and Subscriber, and the data from the losing row is written to a conflict table. 대화형으로 충돌을 해결하도록 선택하지 않으면 해결 프로그램이 실행된 후 즉시 충돌이 해결됩니다.Conflicts are resolved immediately after the resolver executes, unless you select to resolve conflicts interactively.

해결 프로그램 유형Resolver Types

병합 복제에서 충돌 해결은 아티클 수준에서 수행됩니다.In merge replication, conflict resolution takes place at the article level. 여러 아티클로 구성된 게시의 경우 아티클별로 서로 다른 충돌 해결 프로그램을 사용할 수도 있고 게시를 구성하는 모든 아티클, 여러 아티클 또는 하나의 아티클에 대해 같은 충돌 해결 프로그램을 사용할 수도 있습니다.For publications composed of several articles, you can have different conflict resolvers serving different articles, or the same conflict resolver serving one article, several articles, or all the articles comprising a publication.

기본 우선 순위 기반 충돌 해결 프로그램을 사용할 경우에는 아티클의 해결 프로그램 속성을 설정할 필요가 없습니다.If you plan to use the default priority-based conflict resolver, you do not have to set the resolver property of an article. 기본 해결 프로그램 대신 아티클 해결 프로그램을 사용하려면 게시자에서 사용 가능한 해결 프로그램을 선택하여 해당 해결 프로그램이 사용될 아티클에 대해 해결 프로그램 속성을 설정해야 합니다.If you want to use an article resolver instead of the default resolver, you must set the resolver property for the article that will use it by selecting an available resolver on the Publisher. 해결 프로그램으로 전달되어야 하는 모든 특정 정보는 해결 프로그램 정보 속성에서 지정할 수도 있습니다.Any specific information that needs to be passed to the resolver can also be specified in the resolver information property.

병합 복제는 다음 4가지 유형의 충돌 해결 프로그램을 제공합니다.Merge replication offers four types of conflict resolvers:

  • 기본 우선 순위 기반 충돌 해결 프로그램The default priority-based conflict resolver

    기본 해결 메커니즘은 구독이 클라이언트 구독인지 서버 구독인지에 따라 다르게 동작합니다.The default resolution mechanism behaves differently, depending on whether a subscription is a client subscription or a server subscription. 서버 구독을 사용하는 개별 구독자에게 우선 순위 값을 할당하며 우선 순위가 가장 높은 노드의 변경 내용이 충돌 시 적용됩니다.You assign priority values to individual Subscribers that use server subscriptions; changes made at the node with the highest priority win any conflicts. 클라이언트 구독의 경우 게시자에 작성된 첫 번째 변경 내용이 충돌 시 적용됩니다.For client subscriptions, the first change written to the Publisher wins the conflict.

    구독을 만든 후에는 해당 유형을 변경할 수 없습니다.After a subscription is created, it cannot be changed from one type to another.

  • 비즈니스 논리 처리기A business logic handler

    비즈니스 논리 처리기 프레임워크를 사용하면 병합 동기화 과정 동안 호출되는 관리 코드 어셈블리를 작성할 수 있습니다.The business logic handler framework allows you to write a managed code assembly that is called during the merge synchronization process. 이 어셈블리에는 동기화 중에 충돌과 다른 많은 조건에 응답할 수 있는 비즈니스 논리가 포함됩니다.The assembly includes business logic that can respond to conflicts and a number of other conditions during synchronization. 자세한 내용은 병합 동기화 중 비즈니스 논리 실행을 참조하세요.For more information, see Execute Business Logic During Merge Synchronization.

  • COM 기반 사용자 지정 해결 프로그램A COM-based custom resolver

    병합 복제는 MicrosoftMicrosoft Visual C++Visual C++ 또는 MicrosoftMicrosoft Visual BasicVisual Basic과 같은 언어를 사용하여 해결 프로그램을 COM 개체로 작성하기 위한 API를 제공합니다.Merge replication provides an API for writing resolvers as COM objects in languages such as MicrosoftMicrosoft Visual C++Visual C++ or MicrosoftMicrosoft Visual BasicVisual Basic. 자세한 내용은 COM-Based Custom Resolvers을(를) 참조하세요.For more information, see COM-Based Custom Resolvers.

  • MicrosoftMicrosoft

    MicrosoftMicrosoft SQL ServerSQL Server 에는 많은 COM 기반 해결 프로그램이 포함되어 있습니다. SQL ServerSQL Server includes a number of COM-based resolvers. 자세한 내용은 Microsoft COM 기반 해결 프로그램을(를) 참조하세요.For more information, see Microsoft COM-Based Resolvers.

    적절한 유형의 해결 프로그램을 선택하는 방법에 대한 자세한 내용은 해결 프로그램 선택을 참조하세요.For information about how to select the appropriate type of resolver, see Choose a Resolver.

참고

일부 아티클 해결 프로그램은 특정 작업에 대해서만 충돌을 처리하도록 작성됩니다.Some article resolvers are written to handle conflicts only for certain operations. 예를 들어 특정 해결 프로그램은 삽입 또는 삭제는 처리하지 않고 업데이트만 처리할 수 있습니다.For example a resolver might handle updates, but not inserts or deletes. 기본 우선 순위 기반 충돌 해결 프로그램은 아티클 해결 프로그램이 처리하지 못한 모든 충돌을 처리합니다.The default priority-based conflict resolver handles any conflicts not handled by the article resolver.

병합 구독 유형 및 충돌 해결 우선 순위를 지정하려면 다음을 참조하십시오.To specify a merge subscription type and conflict resolution priority, see

대화형 해결 프로그램Interactive Resolver

복제는 기본 우선 순위 기반 충돌 해결 프로그램이나 아티클 해결 프로그램과 함께 사용할 수 있는 대화형 해결 프로그램 사용자 인터페이스를 제공합니다.Replication supplies an Interactive Resolver user interface that can be used in conjunction with either the default priority-based conflict resolver or an article resolver. MicrosoftMicrosoft Windows 동기화 관리자를 통해 요청 시 동기화를 수행할 때 대화형 해결 프로그램은 런타임 시 충돌 데이터를 표시하고 충돌 해결 방법을 선택할 수 있습니다.When performing on-demand synchronization through MicrosoftMicrosoft Windows Synchronization Manager, the Interactive Resolver displays conflict data at run-time, and lets you choose how to resolve conflicts. 대화형 해결 기능 설정 방법 및 대화형 해결 프로그램 시작 방법은 Interactive Conflict Resolution을 참조하십시오.For more information about how to enable interactive resolution and launch the Interactive Resolver, see Interactive Conflict Resolution.

충돌 보기Viewing Conflicts

가장 간단한 방법으로 충돌을 보려면 SQL Server Management StudioSQL Server Management Studio 에서 제공하는 복제 충돌 뷰어를 사용합니다. SQL ServerSQL Server 는 충돌 테이블을 쿼리할 저장 프로시저도 제공합니다.The most straightforward way to view conflicts is to use the Replication Conflict Viewer, available from SQL Server Management StudioSQL Server Management Studio ( SQL ServerSQL Server also provides stored procedures that allow the conflict tables to be queried.). 충돌 뷰어와 대화형 해결 프로그램은 유사한 도구이지만, 대화형 해결 프로그램은 동기화가 이루어지는 동안 충돌을 해결하는데 사용하는 반면 충돌 뷰어는 충돌이 해결된 후 충돌을 보는 데 사용합니다.The Conflict Viewer and Interactive Resolver are similar tools, but the Interactive Resolver allows you to resolve conflicts as synchronization occurs, whereas the Conflict Viewer is designed for viewing conflicts after they have been resolved. 시스템 테이블에서 충돌 메타데이터를 사용할 수 있는 경우(충돌 메타데이터는 기본적으로 14일 동안 유지됨) 충돌 뷰어에서 충돌 해결 결과를 무시할 수 있지만 정기적으로 직접적인 사용자 작업이 필요한 경우 대화형 해결 프로그램을 사용합니다.If the conflict metadata is still available in the system tables (conflict metadata is retained for 14 days by default), you can override conflict resolution outcomes in the Conflict Viewer, but if direct intervention is regularly required, consider using the Interactive Resolver.

참고

논리적 레코드와 관련된 충돌은 충돌 뷰어에 표시되지 않습니다.Conflicts that involve logical records are not displayed in Conflict Viewer. 이러한 충돌에 대한 정보를 보려면 복제 저장 프로시저를 사용합니다.To view information about these conflicts, use replication stored procedures. 자세한 내용은 병합 게시에 대한 충돌 정보 보기(복제 Transact-SQL 프로그래밍)을 참조하세요.For more information, see View Conflict Information for Merge Publications (Replication Transact-SQL Programming).

충돌 뷰어는 3개의 시스템 테이블에 대한 정보를 표시합니다.The Conflict Viewer displays information from three system tables:

  • 복제는 병합 아티클의 각 테이블에 대해 MSmerge_conflict_<PublicationName>_<ArticleName> 형식의 이름으로 충돌 테이블을 만듭니다.Replication creates a conflict table for each table in a merge article, with a name in the form MSmerge_conflict_<PublicationName>_<ArticleName>.

    충돌 테이블의 구조는 기준이 되는 테이블의 구조와 동일합니다.Conflict tables have the same structure as the tables on which they are based. 이 테이블 중 한 테이블의 행은 충돌 행의 삭제된 버전으로 구성되어 있습니다. 행의 적용되는 버전은 실제 사용자 테이블에 있습니다.A row in one of these tables consists of the losing version of a conflict row (the winning version of the row is in the actual user table).

  • MSmerge_conflicts_info 테이블은 충돌 유형을 포함하여 각 충돌에 대한 정보를 제공합니다.The MSmerge_conflicts_info table provides information about each conflict, including the conflict type.

  • sysmergearticles 테이블은 충돌 테이블이 있는 사용자 테이블을 식별하고 충돌 테이블에 대한 정보를 제공합니다.The sysmergearticles table identifies which user tables have conflict tables and provides information about the conflict tables.

    기본적으로 충돌 정보는 다음 위치에 저장됩니다.By default, conflict information is stored:

  • 게시 호환성 수준이 90RTM 이상일 경우 게시자 및 구독자.At the Publisher and Subscriber if the publication compatibility level is 90RTM or higher.

  • 게시 호환성 수준이 80RTM 미만일 경우 게시자At the Publisher if the publication compatibility level is lower than 80RTM.

  • 구독자가 SQL Server CompactSQL Server Compact을 실행하는 경우 게시자.At the Publisher if Subscribers are running SQL Server CompactSQL Server Compact. 충돌 데이터는 SQL Server CompactSQL Server Compact 구독자에 저장할 수 없습니다.Conflict data cannot be stored on SQL Server CompactSQL Server Compact Subscribers.

    충돌을 보려면To view conflicts

  • SQL Server Management StudioSQL Server Management Studio: 병합 게시에 대한 데이터 충돌 보기 및 해결(SQL Server Management Studio): View and Resolve Data Conflicts for Merge Publications (SQL Server Management Studio)

  • 복제 Transact-SQLTransact-SQL 프로그래밍: 병합 게시에 대한 충돌 정보 보기(복제 Transact-SQL 프로그래밍)Replication Transact-SQLTransact-SQL Programming: View Conflict Information for Merge Publications (Replication Transact-SQL Programming)

관련 항목:See Also

데이터 동기화Synchronize Data