Especificar um resolvedor de artigo de mesclagem

Aplica-se a: SQL Server (todas as versões com suporte)

Este tópico descreve como especificar um resolvedor de artigo de mesclagem em SQL Server usando SQL Server Management Studio ou Transact-SQL.

Recomendações

  • A replicação de mesclagem permite os seguintes tipos de resolvedores de artigo:

  • Para usar um resolvedor diferente do resolvedor padrão, você deve copiar o resolvedor ao computador em que é executado o Agente de Mesclagem e registrá-lo (se você estiver utilizando um manipulador de lógica comercial, ele deverá ser registrado também no Publicador). O Merge Agent é executado em:

    • O Distribuidor de uma assinatura push

    • O Assinante de uma assinatura pull

    • O servidor IIS (Serviços de informações da Internet) da Microsoft para uma assinatura pull que usa sincronização da Web

Como usar o SQL Server Management Studio.

Depois que o resolvedor for registrado, especifique que um artigo deve usar o resolvedor na guia Resolver das Propriedades do Artigo – <caixa de diálogo Artigo> , que está disponível no Assistente para Nova Publicação e na caixa de diálogo Propriedades da Publicação – <Publicação> . Para obter mais informações sobre como usar o assistente e acessar a caixa de diálogo, consulte Criar uma publicação e Exibir e modificar as propriedades da publicação.

Para especificar um resolvedor

  1. Na página Artigos do Assistente para Nova Publicação ou na caixa de diálogo Propriedades da Publicação – <Publicação> , selecione uma tabela.

  2. Clique em Propriedades do Artigoe clique em Definir Propriedades do Artigo Realçado da Tabela.

  3. Na página Propriedades do Artigo – <Artigo> , clique na guia Resolver .

  4. Selecione Usar um resolvedor personalizado (registrado no Distribuidor) e então na lista, clique no resolvedor.

  5. Se o resolvedor requerer uma entrada (por exemplo, um nome de coluna), especifique-a na caixa de texto Insira as informações necessárias para o resolvedor .

  6. Selecione OK.

  7. Repita este processo para cada artigo que requer um resolvedor.

Usando o Transact-SQL

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 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 estiver registrado, execute sp_registercustomresolver (Transact-SQL) no Distribuidor. Especifique um nome para o resolvedor para @article_resolver; para um manipulador de lógica de negócios, esse é o nome amigável do assembly. Para resolvedores baseados em COM, especifique o CLSID da DLL para @resolver_clsid e, para um manipulador de lógica de negócios, especifique BusinessLogicModule um valor verdadeiro para @is_dotnet_assembly, o nome do assembly para @dotnet_assembly_name e o nome totalmente qualificado da classe que substitui por @dotnet_class_name.

    Observação

    Se um assembly do manipulador de lógica de negócios não for implantado no mesmo diretório que o Agente de Mesclagem executável, no mesmo diretório que o aplicativo que inicia de forma síncrona o Agente de Mesclagem ou no GAC (cache de assembly global), você precisará 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ção

      Os resolvedores personalizados da Microsoft podem ser encontrados no diretório C:\Arquivos de Programas\Microsoft SQL Server\nnn\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, implante o assembly na mesma pasta que o executável Agente de Mesclagem (replmerg.exe), na mesma pasta que um aplicativo que invoca o Agente de Mesclagem ou na pasta especificada para o parâmetro @dotnet_assembly_name na etapa 3.

    Observação

    O local de instalação padrão do executável Agente de Mesclagem é C:\Arquivos de Programas\Microsoft SQL Server\nnn\COM.

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 de 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 procedimento armazenado, @resolver_info é o nome do procedimento armazenado. Para obter mais informações sobre a entrada necessária para os resolvedores fornecidos pelo Microsoft, consulte Resolvedores baseados em COM da Microsoft.

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 de 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, incluindo o caminho completo para 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 resolvedores personalizados baseados em procedimento armazenado, @resolver_info é o nome do procedimento armazenado. Para obter mais informações sobre as entradas requeridas, consulte Resolvedores baseados em COM da Microsoft.

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 de 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.

Exemplos (Transact-SQL)

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

Consulte Também

Advanced Merge Replication Conflict Detection and Resolution
Implementar um manipulador de lógica de negócios para um artigo de mesclagem