Compartilhar via


Especificar um resolvedor para mesclagem de artigos

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

Nesse Tópico

Antes de começar

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 para o computador no qual o Merge Agent o executa e registrá-lo (se você estiver usando um manipulador de lógica de negócios, ele também deverá ser registrado no Publicador). O Merge Agent é executado às:

    • O Distribuidor para uma assinatura de notificação push

    • O Assinante para uma assinatura de extração

    • O servidor dos Serviços de Informações da Internet da Microsoft (IIS) para uma assinatura de pull que utiliza a 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 da caixa de diálogo Propriedades do Artigo – <Artigo>, que está disponível no Assistente para a 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 propriedades de 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 Artigo e, em seguida, clique em Definir Propriedades do Artigo de Tabela Realçada.

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

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

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

  6. Clique em OK.

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

Usando Transact-SQL

Para registrar um resolvedor de conflitos personalizado

  1. Se você planeja registrar seu próprio resolvedor de conflitos personalizado, crie um dos seguintes tipos:

  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 o CLSID (identificador de classe) 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 um valor para true@is_dotnet_assembly, o nome do assembly para @dotnet_assembly_name e o nome completamente qualificado da classe que substitui BusinessLogicModule para @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 executável do Merge Agent, no mesmo diretório que o aplicativo que inicia de forma síncrona o Merge Agent 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:

    • Copie a DLL do resolvedor personalizado para o Distribuidor para assinaturas push ou para o Assinante para assinaturas pull.

      Observação

      Resolvedores personalizados da Microsoft podem ser encontrados no diretório C:\Arquivos de Programas\Microsoft SQL Server\120\COM.

    • Use regsvr32.exe para registrar a DLL do resolvedor personalizado com o sistema operacional. Por exemplo, a execução do seguinte no prompt de comando registra o Resolvedor de Conflitos Aditivos do 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 do Merge Agent (replmerg.exe), na mesma pasta de um aplicativo que invoca o Merge Agent 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 do Merge Agent é C:\Program Files\Microsoft SQL Server\120\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 de valor do conjunto de resultados.

  3. No banco de dados de publicação, no Publicador, 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 resolvedores fornecidos pela Microsoft, consulte Microsoft COM-Based Resolvedores.

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 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 a entrada necessária, consulte Microsoft COM-Based Resolvers.

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 value 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)

Este exemplo cria um novo artigo e especifica que o Resolvedor de Conflitos de Média do SQL Server seja usado para calcular a média da coluna UnitPrice quando ocorrerem conflitos.

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

Este exemplo altera um artigo para especificar o uso do Resolvedor de Conflitos Aditivos do SQL Server para calcular a soma da coluna UnitsOnOrder quando ocorrerem conflitos.

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

Detecção e resolução avançadas de conflitos de replicação de mesclagem
Implementar um Manipulador de Lógica de Negócios para um Artigo de Mesclagem