병합 아티클용 사용자 지정 충돌 해결 프로그램 구현
적용 대상: SQL Server
이 항목에서는 Transact-SQL 또는 COM 기반 사용자 지정 해결 프로그램을 사용하여 SQL Server의 병합 아티클을 위한 사용자 지정 충돌 해결 프로그램을 구현하는 방법에 대해 설명합니다.
항목 내용
병합 아티클용 사용자 지정 충돌 해결 프로그램 구현을 위해 사용:
Transact-SQL 사용
각 게시자에서 사용자 지정 충돌 해결 프로그램을 Transact-SQL 저장 프로시저로 작성할 수 있습니다. 동기화하는 동안 이 저장 프로시저는 해결 프로그램을 등록한 아티클에서 충돌이 발생할 때 호출됩니다. 충돌 행에 대한 정보는 병합 에이전트 프로시저의 필수 매개 변수에 전달됩니다. 저장 프로시저 기반 사용자 지정 충돌 해결 프로그램은 항상 게시자에서 만들어집니다.
참고 항목
Microsoft SQL Server 저장 프로시저 확인 프로그램은 행 변경 기반 충돌을 처리하기 위해 호출됩니다. 기본 키 위반 또는 고유 인덱스 제약 조건 위반으로 트리거되는 삽입 오류와 같은 다른 유형의 충돌을 처리하는 데 사용할 수 없습니다.
저장 프로시저 기반의 사용자 지정 충돌 해결 프로그램을 만들려면
게시 또는 msdb 데이터베이스의 게시자에서 다음 필수 매개 변수를 구현하는 새 시스템 저장 프로시저를 만듭니다.
매개 변수 데이터 형식 설명 @tableowner sysname 충돌이 해결되는 테이블 소유자의 이름입니다. 게시 데이터베이스의 테이블 소유자입니다. @tableName sysname 충돌이 해결되는 테이블의 이름입니다. @rowguid uniqueidentifier 충돌이 있는 행의 고유 식별자입니다. @subscriber sysname 충돌 변경 내용을 전파 중인 서버의 이름입니다. @subscriber_db sysname 충돌 변경 내용을 전파 중인 데이터베이스의 이름입니다. @log_conflict OUTPUT int 병합 프로세스에서 나중에 충돌을 해결할 수 있도록 충돌을 기록할지 여부를 설정합니다.
0 = 충돌을 기록하지 마세요.
1 = 구독자가 충돌 패자입니다.
2 = 게시자가 충돌 패자입니다.@conflict_message OUTPUT nvarchar(512) 충돌이 기록되는 경우 해결에 대해 제공될 메시지입니다. @destowner sysname 구독자에 있는 게시된 테이블의 소유자. 이 저장 프로시저는 병합 에이전트에 의해 전달된 값을 이러한 매개 변수에 사용하여 사용자 지정 충돌 해결 논리를 구현합니다. 구조가 기본 테이블과 동일하고 행의 승리 버전에 대한 데이터 값을 포함하는 단일 행 결과 집합을 반환해야 합니다.
게시자에 연결할 때 구독자가 사용하는 모든 로그인에 저장 프로시저에 대한 EXECUTE 권한을 부여합니다.
기존 테이블 아티클에서 사용자 지정 충돌 해결 프로그램 사용
sp_addmergearticle 실행하여 아티클을 정의합니다.
@article_resolver 매개 변수에 대해 MicrosoftSQL Server 저장 프로시저 해결 프로그램 값을 지정합니다.
@resolver_info 매개 변수에 대한 충돌 해결 프로그램 논리를 구현하는 저장 프로시저의 이름을 지정합니다.
자세한 내용은 아티클 정의를 참조하세요.
기존 테이블 아티클에서 사용자 지정 충돌 해결 프로그램을 사용하려면
@publication, @article을 지정하고 @property에 article_resolver 값, @value에 MicrosoftSQL Server Stored ProcedureResolver 값을 지정하여 sp_changemergearticle을 실행합니다.
sp_changemergearticle을 실행하고 @publication, @article, @property에 대한 resolver_info 값 및 @value에 대한 충돌 해결 프로그램 논리를 구현하는 저장 프로시저의 이름을 지정합니다.
COM 기반 사용자 지정 해결 프로그램 사용
Microsoft.SqlServer.Replication.BusinessLogicSupport 네임스페이스는 이벤트를 처리하고 병합 복제 동기화 프로세스 중에 발생하는 충돌을 해결하는 복잡한 비즈니스 논리를 작성할 수 있게 해주는 인터페이스를 구현합니다. 자세한 내용은 병합 아티클에 대한 비즈니스 논리 처리기 구현을 참조하세요. 네이티브 코드 기반 사용자 지정 비즈니스 논리를 직접 작성하여 충돌을 해결할 수도 있습니다. 이 논리는 COM 구성 요소로 빌드되고 Microsoft Visual C++와 같은 제품을 사용하여 DLL(동적 연결 라이브러리)로 컴파일됩니다. 이러한 종류의 COM 기반 사용자 지정 충돌 해결자는 충돌 해결을 위해 특별히 설계된 ICustomResolver 인터페이스를 구현해야 합니다.
COM 기반 사용자 지정 충돌 해결 프로그램을 만들고 등록하려면
COM 호환 제작 환경에서 사용자 지정 충돌 해결 프로그램 라이브러리에 대한 참조를 추가합니다.
Visual C++ 프로젝트의 경우 #import 지시문을 사용하여 이 라이브러리를 프로젝트로 가져옵니다.
ICustomResolver 인터페이스를 구현하는 클래스를 만듭니다.
특정 메서드 및 속성을 구현합니다.
프로젝트를 빌드하여 사용자 지정 충돌 해결 프로그램 라이브러리 파일을 만듭니다.
병합 에이전트 실행 파일이 포함된 디렉터리에 라이브러리를 배포합니다(일반적으로 \Microsoft SQL Server\100\COM).
참고 항목
사용자 지정 충돌 해결 프로그램을 끌어오기 구독의 구독자, 밀어넣기 구독의 배포자 또는 웹 동기화에 사용되는 웹 서버에 배포해야 합니다.
배포 디렉터리에서 regsvr32.exe를 실행하여 다음과 같이 사용자 지정 충돌 해결 프로그램 라이브러리를 등록합니다.
regsvr32.exe mycustomresolver.dll
게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하여 라이브러리가 사용자 지정 충돌 해결 프로그램으로 아직 등록되지 않았는지 확인합니다.
라이브러리를 사용자 지정 충돌 해결 프로그램으로 등록하려면 배포자에서 sp_registercustomresolver(Transact-SQL)를 실행합니다. @article_resolver에 COM 개체 식별 이름, @resolver_clsid에 라이브러리의 ID(CLSID)를 지정하고 @is_dotnet_assembly에 false 값을 지정합니다.
참고 항목
더 이상 필요하지 않은 경우 sp_unregistercustomresolver(Transact-SQL)를 사용하여 사용자 지정 충돌 해결 프로그램을 등록 취소할 수 있습니다.
(옵션) 클러스터에서 6-9단계를 반복하여 클러스터의 모든 노드에 사용자 지정 해결 프로그램을 등록합니다. 이러한 단계는 사용자 지정 확인자가 장애 조치(failover) 후 조정자를 제대로 로드할 수 있는지 확인하는 데 필요합니다.
새 테이블 아티클에서 사용자 지정 충돌 해결 프로그램을 사용하려면
게시자에서 sp_enumcustomresolvers (Transact-SQL)을 실행하고 원하는 해결 프로그램의 이름을 확인합니다.
게시 데이터베이스의 게시자에서 sp_addmergearticle(Transact-SQL)을 실행하여 아티클을 정의합니다. @article_resolver에 1단계의 아티클 해결 프로그램 식별 이름을 지정합니다. 자세한 내용은 아티클 정의를 참조하세요.
기존 테이블 아티클에서 사용자 지정 충돌 해결 프로그램을 사용하려면
게시자에서 sp_enumcustomresolvers (Transact-SQL)을 실행하고 원하는 해결 프로그램의 이름을 확인합니다.
@publication, @article을 지정하고 @property에 article_resolver 값, @value에 1단계의 아티클 해결 프로그램 식별 이름을 지정하여 sp_changemergearticle(Transact-SQL)을 실행합니다.