Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
O resolvedor padrão. O comportamento do resolvedor padrão depende se a subscrição é uma subscrição de cliente ou de servidor. Para mais informações sobre a especificação do tipo de subscrição, consulte Especificar um Tipo de Subscrição de Fusão e Prioridade de Resolução de Conflitos.
Um resolvedor personalizado que escreves, que pode ser um gestor de lógica de negócio (escrito em código gerido) ou um resolvedor personalizado baseado em COM. Para mais informações, consulte Replicação Avançada de Fusão - Deteção e Resolução de Conflitos. Se precisar de implementar uma lógica personalizada que seja executada para cada linha replicada, não apenas para linhas em conflito, consulte Implementar um Gestor de Lógica de Negócio para um Artigo de Fusão.
Um resolvedor padrão baseado em COM, que está incluído no SQL Server.
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.
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.
Selecione Propriedades do Artigo e depois selecione Propriedades de Conjunto do Artigo da Tabela Destacada.
Na página Propriedades do Artigo - <Artigo> , selecione o separador Resolver .
Selecione Usar um resolvedor personalizado (registado no Distribuidor) e depois selecione o resolvedor na lista.
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 .
Selecione OK.
Repita este processo para cada artigo que exija um resolvedor.
Utilize o Transact-SQL
Se planeia registar o seu próprio resolvedor de conflitos personalizado, crie um dos seguintes tipos:
Resolver gerido baseado em código como gestor de lógica de negócio. Para mais informações, consulte Implementar um Gestor de Lógica de Negócio para um artigo de fusão.
Resolvedor baseado em procedimentos armazenados e resolvedor baseado em COM. Para mais informações, consulte Implementar um resolvedor de conflitos personalizado para um artigo de fusão.
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.
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 detruepara@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.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>\COMdiretório.Use
regsvr32.exepara registar a DLL personalizada do resolver no sistema operativo. Por exemplo, o seguinte comando regista o SQL Server Additive Conflict Resolver:regsvr32 ssradd.dll
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_nameparâ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
Se planeia usar um resolvedor de conflitos personalizado, crie e registe-o seguindo o procedimento anterior.
No Publisher, execute sp_enumcustomresolvers e anote o nome do resolvedor personalizado desejado no
valuecampo do conjunto de resultados.No Publisher da base de dados de publicações, execute sp_addmergearticle. Especifique o nome do resolvedor a partir do passo 2 para
@article_resolvere qualquer entrada necessária para o resolvedor personalizado usando o@resolver_infoparâ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
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_resolvercampo. Oresolver_infocampo mostra qualquer entrada fornecida ao resolvedor.No Publisher, execute sp_enumcustomresolvers e anote o nome do resolvedor personalizado desejado no
valuecampo do conjunto de resultados.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.Para alterar qualquer entrada necessária para o resolvedor personalizado, execute sp_changemergearticle novamente. Especifique um valor de
resolver_infopara@propertye 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
No Publisher, execute sp_enumcustomresolvers e indique o nome do resolvedor personalizado a remover no
valuecampo do conjunto de resultados.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