병합 아티클에 대한 사용자 지정 충돌 해결 프로그램 구현

적용 대상:SQL Server

이 항목에서는 Transact-SQL 또는 COM 기반 사용자 지정 해결 프로그램을 사용하여 SQL Server의 병합 아티클에 대한 사용자 지정 충돌 해결 프로그램을 구현하는 방법에 대해 설명합니다.

항목 내용

Transact-SQL 사용

각 게시자에서 사용자 지정 충돌 해결 프로그램을 Transact-SQL 저장 프로시저로 작성할 수 있습니다. 동기화하는 동안 이 저장 프로시저는 해결 프로그램을 등록한 아티클에서 충돌이 발생할 때 호출됩니다. 충돌 행에 대한 정보는 병합 에이전트 프로시저의 필수 매개 변수에 전달됩니다. 저장 프로시저 기반 사용자 지정 충돌 해결자는 항상 게시자에서 만들어집니다.

참고 항목

Microsoft SQL Server 저장 프로시저 확인자는 행 변경 기반 충돌을 처리하기 위해 호출됩니다. PRIMARY KEY 위반 또는 고유 인덱스 제약 조건 위반으로 트리거되는 삽입 오류와 같은 다른 유형의 충돌을 처리하는 데 사용할 수 없습니다.

저장 프로시저 기반 사용자 지정 충돌 해결 프로그램을 만들려면

  1. 게시 또는 msdb 데이터베이스의 게시자에서 다음 필수 매개 변수를 구현하는 새 시스템 저장 프로시저를 만듭니다.

    매개 변수 데이터 형식 설명
    @tableowner sysname 충돌이 해결되는 테이블 소유자의 이름입니다. 게시 데이터베이스의 테이블 소유자입니다.
    @tablename sysname 충돌이 해결되는 테이블의 이름입니다.
    @rowguid uniqueidentifier 충돌이 있는 행의 고유 식별자입니다.
    @subscriber sysname 충돌 변경 내용을 전파 중인 서버의 이름입니다.
    @subscriber_db sysname 충돌하는 변경 내용이 전파되는 데이터베이스의 이름입니다.
    출력 @log_conflict int 병합 프로세스에서 나중에 충돌을 해결할 수 있도록 충돌을 기록할지 여부를 설정합니다.

    0 = 충돌을 기록하지 마세요.

    1 = 구독자가 충돌 패자입니다.

    2 = 게시자가 충돌 패자입니다.
    출력 @conflict_message nvarchar(512) 충돌이 기록되는 경우 해결에 대해 제공될 메시지입니다.
    @destowner sysname 구독자에 있는 게시된 테이블의 소유자

    이 저장 프로시저는 병합 에이전트 전달된 값을 이러한 매개 변수에 사용하여 사용자 지정 충돌 해결 논리를 구현합니다. 구조가 기본 테이블과 동일하고 행의 승리 버전에 대한 데이터 값을 포함하는 단일 행 결과 집합을 반환해야 합니다.

  2. 게시자에 연결할 때 구독자가 사용하는 모든 로그인에 저장 프로시저에 대한 EXECUTE 권한을 부여합니다.

새 테이블 아티클에서 사용자 지정 충돌 해결 프로그램 사용

  1. sp_addmergearticle 실행하여 아티클을 정의합니다.

  2. @article_resolver 매개 변수에 대한 MicrosoftSQL서버 저장 프로시저 확인자 값을 지정합니다.

  3. @resolver_info 매개 변수에 대한 충돌 해결 프로그램 논리를 구현하는 저장 프로시저의 이름을 지정합니다.

    자세한 내용은 아티클 정의를 참조하세요.

기존 테이블 아티클에서 사용자 지정 충돌 해결 프로그램을 사용하려면

  1. sp_changemergearticle 실행하고 @publication, @article, @property article_resolver및 @value MicrosoftSQL Server 저장 프로시저Resolver 값을 지정합니다.

  2. sp_changemergearticle 실행하고 @publication, @article, @property resolver_info 및 @value 대한 충돌 해결 프로그램 논리를 구현하는 저장 프로시저의 이름을 지정합니다.

COM 기반 사용자 지정 확인자 사용

Microsoft.SqlServer.Replication.BusinessLogicSupport 네임스페이스는 복잡한 비즈니스 논리를 작성하여 이벤트를 처리하고 병합 복제본(replica)tion 동기화 프로세스 중에 발생하는 충돌을 해결할 수 있는 인터페이스를 구현합니다. 자세한 내용은 병합 아티클에 대한 비즈니스 논리 처리기 구현을 참조하세요. 네이티브 코드 기반 사용자 지정 비즈니스 논리를 직접 작성하여 충돌을 해결할 수도 있습니다. 이 논리는 COM 구성 요소로 빌드되고 Microsoft Visual C++와 같은 제품을 사용하여 DLL(동적 연결 라이브러리)로 컴파일됩니다. 이러한 종류의 COM 기반 사용자 지정 충돌 해결자는 충돌 해결을 위해 특별히 설계된 ICustomResolver 인터페이스를 구현해야 합니다.

COM 기반 사용자 지정 충돌 해결 프로그램을 만들고 등록하려면

  1. COM 호환 제작 환경에서 사용자 지정 충돌 해결 프로그램 라이브러리에 대한 참조를 추가합니다.

  2. Visual C++ 프로젝트의 경우 #import 지시문을 사용하여 이 라이브러리를 프로젝트로 가져옵니다.

  3. ICustomResolver 인터페이스를 구현하는 클래스를 만듭니다.

  4. 특정 메서드 및 속성을 구현합니다.

  5. 프로젝트를 빌드하여 사용자 지정 충돌 해결 프로그램 라이브러리 파일을 만듭니다.

  6. 병합 에이전트 실행 파일이 포함된 디렉터리에 라이브러리를 배포합니다(일반적으로 \Microsoft SQL Server\100\COM).

    참고 항목

    사용자 지정 충돌 해결 프로그램을 끌어오기 구독의 구독자, 밀어넣기 구독의 배포자 또는 웹 동기화에 사용되는 웹 서버에 배포해야 합니다.

  7. 다음과 같이 배포 디렉터리에서 regsvr32.exe 실행하여 사용자 지정 충돌 해결 프로그램 라이브러리를 등록합니다.

    regsvr32.exe mycustomresolver.dll  
    
  8. 게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하여 라이브러리가 사용자 지정 충돌 해결 프로그램으로 아직 등록되지 않은지 확인합니다.

  9. 라이브러리를 사용자 지정 충돌 해결 프로그램으로 등록하려면 배포자에서 sp_registercustomresolver(Transact-SQL)를 실행합니다. @article_resolver COM 개체의 이름, @resolver_clsid 라이브러리의 ID(CLSID) 및 @is_dotnet_assembly false 값을 지정합니다.

    참고 항목

    더 이상 필요하지 않은 경우 sp_unregistercustomresolver(Transact-SQL)를 사용하여 사용자 지정 충돌 해결 프로그램을 등록 취소할 수 있습니다.

  10. (선택 사항) 클러스터에서 6-9단계를 반복하여 클러스터의 모든 노드에 사용자 지정 확인자를 등록합니다. 이러한 단계는 사용자 지정 확인자가 장애 조치(failover) 후 조정자를 제대로 로드할 수 있는지 확인하는 데 필요합니다.

새 테이블 아티클에서 사용자 지정 충돌 해결 프로그램을 사용하려면

  1. 게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하고 원하는 확인자의 이름을 적어둡니다.

  2. 게시 데이터베이스의 게시자에서 sp_addmergearticle(Transact-SQL)를 실행하여 아티클을 정의합니다. @article_resolver 1단계에서 아티클 확인자의 이름을 지정합니다. 자세한 내용은 아티클 정의를 참조하세요.

기존 테이블 아티클에서 사용자 지정 충돌 해결 프로그램을 사용하려면

  1. 게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하고 원하는 확인자의 이름을 적어둡니다.

  2. @publication, @article, @property article_resolver 값, @value 1단계의 아티클 확인자 이름을 지정하여 sp_changemergearticle(Transact-SQL)을 실행합니다.

참고 항목

고급 병합 복제 충돌 감지 및 해결
COM 기반 사용자 지정 해결 프로그램
복제 보안을 위한 최선의 구현 방법