Especifique um resolvedor de artigos de fusão

Aplica-se a:SQL Server

Este artigo descreve como especificar um resolvedor de artigos de fusão no SQL Server utilizando o SQL Server Management Studio ou Transact-SQL.

Recomendações

  • A replicação de fusão suporta os seguintes tipos de resolvedores de artigos:

  • Para usar um resolvedor diferente do resolver padrão, deve copiar o resolver para o computador onde o Merge Agent é executado e registá-lo. Se estiveres a usar um gestor de lógica de negócios, também deves registá-lo no Publisher. O Merge Agent funciona em:

    • O Distribuidor para uma subscrição push

    • O Assinante para uma subscrição pull

    • O servidor do Serviços de Informação Internet (IIS) para uma subscrição pull que utiliza sincronização Web

Utilize SQL Server Management Studio

Depois de registar o resolvedor, especifique que um artigo deve usar o resolvedor no separador Resolver da caixa de diálogo Propriedades do Artigo - <Artigo> . Pode aceder a esta caixa de diálogo no Assistente de Novas Publicações e na caixa de diálogo Propriedades de Publicação - <Publicação> . Para mais informações sobre como usar o assistente e aceder à caixa de diálogo, consulte Criar uma publicação e Visualizar e Modificar Propriedades de Publicação.

  1. Na página de Artigos do Assistente de Novas Publicações ou na caixa de diálogo Propriedades de Publicação - <Publicação> , selecione uma tabela.

  2. Selecione Propriedades do Artigo e depois selecione Propriedades de Conjunto do Artigo da Tabela Destacada.

  3. Na página Propriedades do Artigo - <Artigo> , selecione o separador Resolver .

  4. Selecione Usar um resolvedor personalizado (registado no Distribuidor) e depois selecione o resolvedor na lista.

  5. Se o resolver exigir introdução (como o nome de uma coluna), introduza-a na caixa de texto Introduzir necessária para a caixa de texto do resolvedor .

  6. Selecione OK.

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

Utilize o Transact-SQL

  1. Se planeia registar o seu próprio resolvedor de conflitos personalizado, crie um dos seguintes tipos:

  2. Para determinar se o resolvedor desejado já está registado, execute sp_enumcustomresolvers no Publisher em qualquer base de dados. Este procedimento devolve uma descrição do resolvedor personalizado, o identificador de classe (CLSID) para cada resolvedor baseado em COM registado no Distribuidor, e informações sobre a montagem gerida para cada handler de lógica de negócio registado no Distribuidor.

  3. Se o resolvedor personalizado desejado ainda não estiver registado, execute sp_registercustomresolver no Distribuidor. Especifique um nome para o resolvedor para @article_resolver. Para um handler de lógica de negócios, este nome é o nome amigável do assembly. Para resolvers baseados em COM, especifique o CLSID da DLL para @resolver_clsid. Para um manipulador de lógica de negócios, especifique um valor de true para @is_dotnet_assembly, o nome do assembly para @dotnet_assembly_name, e o nome totalmente qualificado da classe que sobrescreve BusinessLogicModule para @dotnet_class_name.

    Observação

    Se não implementar um handler de lógica de negócio assembly no mesmo diretório do executável Merge Agent, no mesmo diretório da aplicação que inicia sincronizadamente o Merge Agent, ou na cache global de assembly (GAC), precisa de especificar o caminho completo com o nome assembly para @dotnet_assembly_name.

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

    • Copie a DLL personalizada do resolver para o Distribuidor para subscrições push ou para o Assinante para subscrições pull.

      Observação

      Os resolvers personalizados da Microsoft estão no <drive>:\Program Files\Microsoft SQL Server\<nnn>\COM diretório.

    • Use regsvr32.exe para registar a DLL personalizada do resolver no sistema operativo. Por exemplo, o seguinte comando regista o SQL Server Additive Conflict Resolver:

      regsvr32 ssradd.dll
      
  5. Se o resolvedor for um gestor de lógica de negócio, implemente o assembly na mesma pasta que o executável Merge Agent (replmerg.exe), na mesma pasta de uma aplicação que invoca o Merge Agent, ou na pasta especificada para o @dotnet_assembly_name parâmetro no passo 3.

    Observação

    A localização padrão de instalação do executável do Merge Agent é <drive>:\Program Files\Microsoft SQL Server\<nnn>\COM.

Especifique um resolvedor personalizado ao definir um artigo de fusão

  1. Se planeia usar um resolvedor de conflitos personalizado, crie e registe-o seguindo o procedimento anterior.

  2. No Publisher, execute sp_enumcustomresolvers e anote o nome do resolvedor personalizado desejado no value campo do conjunto de resultados.

  3. No Publisher da base de dados de publicações, execute sp_addmergearticle. Especifique o nome do resolvedor a partir do passo 2 para @article_resolver e qualquer entrada necessária para o resolvedor personalizado usando o @resolver_info parâmetro. Para resolvers personalizados baseados em procedimentos armazenados, @resolver_info é o nome do procedimento armazenado. Para mais informações sobre a entrada necessária para resolvers fornecida pela Microsoft, consulte Conflito Avançado de Replicação de Fusão - COM-Based Resolvers.

Especifique ou altere um resolvedor personalizado para um artigo de fusão existente

  1. Para determinar se um resolvedor personalizado está definido para um artigo ou para obter o nome do resolvedor, execute sp_helpmergearticle. Se houver um resolvedor personalizado definido para o artigo, o seu nome aparece no article_resolver campo. O resolver_info campo mostra qualquer entrada fornecida ao resolvedor.

  2. No Publisher, execute sp_enumcustomresolvers e anote o nome do resolvedor personalizado desejado no value campo do conjunto de resultados.

  3. No Publisher na base de dados de publicação, execute sp_changemergearticle. Especifique um valor de article_resolver, incluindo o caminho completo para os manipuladores de lógica de negócio, para @property, e o nome do resolvedor personalizado desejado a partir do passo 2 para @value.

  4. Para alterar qualquer entrada necessária para o resolvedor personalizado, execute sp_changemergearticle novamente. Especifique um valor de resolver_info para @property e qualquer entrada necessária para o resolvedor personalizado para @value. Para resolvers personalizados baseados em procedimentos armazenados, @resolver_info é o nome do procedimento armazenado. Para mais informações sobre a entrada necessária, consulte Conflito Avançado de Replicação de Fusão - COM-Based Resolvers.

Desregistar um resolvedor de conflitos personalizado

  1. No Publisher, execute sp_enumcustomresolvers e indique o nome do resolvedor personalizado a remover no value campo do conjunto de resultados.

  2. No Distribuidor, executa sp_unregistercustomresolver. Especifique o nome completo do resolvedor personalizado a partir do passo 1 para @article_resolver.

Exemplos (Transact-SQL)

Este exemplo cria um novo artigo e especifica que o SQL Server Averaging Conflict Resolver deve ser usado para calcular a média da UnitPrice coluna quando ocorrem 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 usando o SQL Server Additive Conflict Resolver para calcular a soma da UnitsOnOrder coluna quando ocorrem 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