방법: 병합 아티클 해결 프로그램 지정(복제 Transact-SQL 프로그래밍)
병합 게시에 대한 아티클을 정의하는 경우 사용자 지정 충돌 해결 프로그램을 지정할 수 있습니다. 자세한 내용은 고급 병합 복제 충돌 감지 및 해결을 참조하십시오. Microsoft SQL Server에는 미리 정의된 여러 개의 사용자 지정 충돌 해결 프로그램이 있으며 직접 작성할 수도 있습니다. 충돌하는 행뿐만 아니라 각 복제된 행에 대해서도 실행되는 사용자 지정 논리를 구현해야 하는 경우 방법: 병합 아티클에 대한 비즈니스 논리 처리기 구현(복제 프로그래밍)을 참조하십시오.
사용자 지정 충돌 해결 프로그램을 등록하려면
사용자 지정 충돌 해결 프로그램을 등록하려면 다음 유형 중 하나를 만듭니다.
관리 코드 기반 해결 프로그램(비즈니스 논리 처리기). 자세한 내용은 방법: 병합 아티클에 대한 비즈니스 논리 처리기 구현(복제 프로그래밍)을 참조하십시오.
저장 프로시저 기반 해결 프로그램. 자세한 내용은 방법: 병합 아티클을 위한 저장 프로시저 기반 사용자 지정 충돌 해결 프로그램 구현(복제 Transact-SQL 프로그래밍)을 참조하십시오.
COM 기반 해결 프로그램. 자세한 내용은 방법: 병합 아티클용 COM 기반 사용자 지정 충돌 해결 프로그램 구현(복제 프로그래밍)을 참조하십시오.
원하는 해결 프로그램이 이미 등록되어 있는지 확인하려면 데이터베이스의 게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행합니다. 그러면 사용자 지정 해결 프로그램에 대한 설명, 배포자에 등록된 각 COM 기반 해결 프로그램의 CLSID(클래스 식별자) 또는 배포자에 등록된 각 비즈니스 논리 처리기의 관리 어셈블리에 대한 정보가 표시됩니다.
원하는 해결 프로그램이 아직 등록되지 않은 경우 배포자에서 sp_registercustomresolver(Transact-SQL)를 실행합니다. @article_resolver에 해결 프로그램 이름을 지정합니다. 비즈니스 논리 처리기의 경우 어셈블리 이름입니다. COM 기반 해결 프로그램의 경우 @resolver_clsid에 DLL의 CLSID를 지정하고, 비즈니스 논리 처리기의 경우 @is_dotnet_assembly에 true 값, @dotnet_assembly_name에 어셈블리의 이름, @dotnet_class_name에 BusinessLogicModule을 덮어쓰는 정규화된 클래스 이름을 지정합니다.
[!참고]
비즈니스 논리 처리기 어셈블리가 병합 에이전트 실행 파일과 같은 디렉터리, 병합 에이전트를 동기적으로 시작하는 응용 프로그램과 같은 디렉터리, 또는 GAC(전역 어셈블리 캐시)에 배포되지 않은 경우 @dotnet_assembly_name에 어셈블리 이름을 포함하는 전체 경로를 지정해야 합니다.
COM 기반 해결 프로그램인 경우:
밀어넣기 구독에 대한 배포자 또는 끌어오기 구독에 대한 구독자에 사용자 지정 해결 프로그램 DLL을 복사합니다.
[!참고]
Microsoft 사용자 지정 해결 프로그램은 C:\Program Files\Microsoft SQL Server\100\COM 디렉터리에 있습니다.
regsvr32.exe를 사용하여 운영 체제에 사용자 지정 해결 프로그램 DLL을 등록합니다. 예를 들어 명령 프롬프트에서 다음을 실행하면 SQL Server 가산성 충돌 해결 프로그램이 등록됩니다.
regsvr32 ssradd.dll
해결 프로그램이 비즈니스 논리 처리기인 경우 병합 에이전트 실행 파일(replmerg.exe)과 같은 디렉터리, 병합 에이전트를 호출하는 응용 프로그램과 같은 폴더, 또는 3단계에서 @dotnet_assembly_name 매개 변수에 지정한 폴더에 어셈블리를 배포합니다.
[!참고]
병합 에이전트 실행 파일의 기본 설치 위치는 C:\Program Files\Microsoft SQL Server\100\COM입니다.
병합 아티클을 정의할 때 사용자 지정 해결 프로그램을 지정하려면
사용자 지정 충돌 해결 프로그램을 사용하려면 위 절차를 사용하여 해결 프로그램을 만들고 등록합니다.
게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하고 결과 집합의 value 필드에서 원하는 사용자 지정 해결 프로그램의 이름을 확인합니다.
게시 데이터베이스의 게시자에서 sp_add_targetservergroup(Transact-SQL)을 실행합니다. @article_resolver에 2단계의 이름을 지정하고 @resolver_info 매개 변수를 사용하여 사용자 지정 해결 프로그램에 필요한 입력을 지정합니다. 저장 프로시저 기반 사용자 지정 해결 프로그램의 경우 @resolver_info는 저장 프로시저의 이름입니다. Microsoft에서 제공하는 해결 프로그램에 필요한 입력에 대한 자세한 내용은 Microsoft COM 기반 해결 프로그램을 참조하십시오.
기존 병합 아티클에 대한 사용자 지정 해결 프로그램을 지정하거나 변경하려면
아티클에 대한 사용자 지정 해결 프로그램이 정의되어 있는지 확인하려면 sp_helpmergearticle(Transact-SQL)을 실행합니다. 아티클에 대해 정의된 사용자 지정 해결 프로그램이 있으면 article_resolver 필드에 이름이 표시됩니다. 해결 프로그램에 제공되는 입력은 모두 결과 집합의 resolver_info에 표시됩니다.
게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하고 결과 집합의 value 필드에서 원하는 사용자 지정 해결 프로그램의 이름을 확인합니다.
게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)을 실행합니다. @property에 비즈니스 논리 처리기의 전체 경로를 포함하여 article_resolver 값을 지정하고, @value에는 2단계의 원하는 사용자 지정 해결 프로그램 이름을 지정합니다.
사용자 지정 해결 프로그램에 필요한 입력을 변경하려면 sp_changemergearticle(Transact-SQL)을 다시 실행합니다. @property에 resolver_info 값, @value에 사용자 지정 해결 프로그램에 필요한 입력을 지정합니다. 저장 프로시저 기반 사용자 지정 해결 프로그램의 경우 @resolver_info는 저장 프로시저의 이름입니다. 필요한 입력에 대한 자세한 내용은 Microsoft COM 기반 해결 프로그램을 참조하십시오.
사용자 지정 충돌 해결 프로그램의 등록을 취소하려면
게시자에서 sp_enumcustomresolvers(Transact-SQL)를 실행하고 결과 집합의 value 필드에서 제거할 사용자 지정 해결 프로그램의 이름을 확인합니다.
배포자에서 sp_unregistercustomresolver(Transact-SQL)를 실행합니다. @article_resolver에 1단계에서 확인한 사용자 지정 해결 프로그램의 전체 이름을 지정합니다.
예
이 예에서는 새 아티클을 만들고 충돌이 발생하는 경우 SQL Server 평균 충돌 해결 프로그램을 사용하여 UnitPrice 열의 평균을 계산하도록 지정합니다.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';
EXEC sp_addmergearticle
@publication = @publication,
@article = @article,
@source_object = @article,
@article_resolver = 'Microsoft SQL Server Averaging Conflict Resolver',
@resolver_info = 'UnitPrice';
GO
이 예에서는 아티클을 변경하여 충돌이 발생한 경우 SQL Server 가산 충돌 해결 프로그램을 사용하여 UnitsOnOrder 열의 합을 계산하도록 지정합니다.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property='article_resolver',
@value='Microsoft SQL Server Additive Conflict Resolver';
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property='resolver_info',
@value='UnitsOnOrder';
GO