Como especificar um resolvedor de artigos de mesclagem (Programação Transact-SQL de replicação)

Ao definir um artigo para uma publicação de mesclagem, você pode especificar um resolvedor de conflitos personalizado. Para obter mais informações, consulte Detecção e resolução de conflito de replicação de mesclagem avançada. O Microsoft SQL Server inclui vários resolvedores de conflitos personalizados predefinidos ou você pode gravar os seus próprios. Se precisar implementar uma lógica personalizada que é executada para cada linha replicada, não apenas para as linhas conflitantes, consulte Como implementar um manipulador de lógica de negócios para um artigo de mesclagem (Programação de replicação).

Para registrar um resolvedor de conflitos personalizado

  1. Se planejar registrar seu próprio resolvedor de conflitos personalizado, crie um dos tipos a seguir:

  2. Para determinar se o resolvedor desejado já está registrado, execute o sp_enumcustomresolvers (Transact-SQL) no Publicador em qualquer banco de dados. Isso exibe uma descrição do resolvedor personalizado bem como do identificador de classe (CLSID) para cada resolvedor baseado em COM registrado no Distribuidor ou informações sobre o assembly gerenciado para cada manipulador de lógica de negócios registrado no Distribuidor.

  3. Se o resolvedor personalizado desejado ainda não está registrado, execute o sp_registercustomresolver (Transact-SQL) no Distribuidor. Especifique um nome para o resolvedor para @article_resolver; para um manipulador de lógica de negócios, este é o nome amigável para o assembly. Para os resolvedores baseados em COM, especifique o CLSID do DLL para @resolver_clsid e para um manipulador de lógica de negócios, especifique um valor true para @is_dotnet_assembly, o nome do assembly para @dotnet_assembly_name e o nome totalmente qualificado da classe que substitui o BusinessLogicModule para @dotnet_class_name.

    ObservaçãoObservação

    Se um assembly de manipuladores de lógica de negócios não estiver implantado no mesmo diretório que o executável Merge Agent, no mesmo diretório que o aplicativo que inicia de maneira síncrona o Merge Agent ou no GAC (cache de assembly global), você deverá especificar o caminho completo com o nome do assembly para @dotnet_assembly_name.

  4. Se o resolvedor for um resolvedor baseado em COM:

    • Copiar o resolvedor personalizado DLL para o Distribuidor para assinaturas push ou para o Assinante para assinaturas pull.

      ObservaçãoObservação

      Resolvedores personalizados Microsoft podem ser localizados no diretório C:\Arquivos de Programas\Microsoft SQL Server\100\COM.

    • Use o regsvr32.exe para registrar o resolvedor personalizado DLL no sistema operacional. Por exemplo, executando o seguinte no prompt de comando registra o Resolvedor de Conflitos Suplementar SQL Server:

      regsvr32 ssradd.dll
      
  5. Se o resolvedor for um manipulador de lógica de negócios, implemente o assembly na mesma pasta do executável Merge Agent, (replmerg.exe), na mesma pasta do aplicativo que chama o Merge Agent ou na pasta especificada para o parâmetro @dotnet_assembly_name na etapa 3.

    ObservaçãoObservação

    O local de instalação padrão do executável Merge Agent é C:\Arquivos de Programas\Microsoft SQL Server\100\COM.

Para especificar um resolvedor personalizado ao definir um artigo de mesclagem

  1. Se você planeja usar um resolvedor de conflitos personalizado, crie e registre o resolvedor usando o procedimento acima.

  2. No Publicador, execute sp_enumcustomresolvers (Transact-SQL) e anote o nome do resolvedor personalizado desejado no campo valor do conjunto de resultados.

  3. No Publicador no banco de dados de publicação, execute sp_addmergearticle (Transact-SQL). Especifique o nome do resolvedor da etapa 2 para @article_resolver e qualquer entrada necessária para o resolvedor personalizado usando o parâmetro @resolver_info. Para resolvedores personalizados baseados em procedimentos armazenados, o @resolver_info é o nome do procedimento armazenado. Para obter mais informações sobre a entrada requerida para os resolvedores fornecidos pela Microsoft, consulte Resolvedores Microsoft baseados em COM.

Para especificar ou alterar um resolvedor personalizado para um artigo de mesclagem existente

  1. Para determinar se um resolvedor personalizado foi definido para um artigo ou para obter o nome do resolvedor, execute sp_helpmergearticle (Transact-SQL). Se houver um resolvedor personalizado definido para o artigo, seu nome será exibido no campo article_resolver. Qualquer entrada fornecida ao resolvedor será exibida no campo resolver_info do conjunto de resultados.

  2. No Publicador, execute sp_enumcustomresolvers (Transact-SQL) e anote o nome do resolvedor personalizado desejado no campo valor do conjunto de resultados.

  3. No Publicador no banco de dados de publicação, execute sp_changemergearticle (Transact-SQL). Especifique um valor de article_resolver, inclusive o caminho completo para os manipuladores de lógica de negócios, para @property e o nome do resolvedor personalizado desejado da etapa 2 para @value.

  4. Para alterar qualquer entrada necessária para o resolvedor personalizado, execute sp_changemergearticle (Transact-SQL) novamente. Especifique um valor de resolver_info para @property e qualquer entrada necessária para o resolvedor personalizado para @value. Para os resolvedores personalizados baseados em procedimentos armazenados, o @resolver_info é o nome do procedimento armazenado. Para obter mais informações sobre a entrada necessária, consulte Resolvedores Microsoft baseados em COM.

Para cancelar o registro de um resolvedor de conflitos personalizado

  1. No Publicador, execute sp_enumcustomresolvers (Transact-SQL) e anote o nome do resolvedor personalizado a ser removido no campo valor do conjunto de resultados.

  2. Execute sp_unregistercustomresolver (Transact-SQL) no Distribuidor. Especifique o nome completo do resolvedor personalizado da etapa 1 para @article_resolver.

Exemplo

Esse exemplo cria um novo artigo e especifica que o Resolvedor de Conflitos de Cálculo de Média SQL Server deve ser usado para calcular a média da coluna UnitPrice quando os conflitos ocorrerem.

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

Esse exemplo altera um artigo a ser especificado usando o Resolvedor de Conflitos Suplementares SQL Server para calcular a soma da coluna UnitsOnOrder quando os conflitos ocorrerem.

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