Como implementar um resolvedor de conflito personalizado com base em procedimentos armazenados para um artigo de mesclagem (Programação Transact-SQL de replicação)
Você pode escrever seu próprio resolvedor de conflito personalizado como um procedimento armazenado Transact-SQL em cada Publicador. Durante a sincronização, esse procedimento armazenado será invocado quando forem encontrados conflitos em um artigo para o qual o resolvedor foi registrado, e a informação na linha em conflito é passada pelo Merge Agent para os parâmetros requeridos do procedimento. Resolvedores de conflito personalizados com base em procedimento armazenado sempre são criados no Publicador.
Observação |
---|
Microsoft Só serão invocados os resolvedores procedimento armazenado MicrosoftSQL Server para controlar conflitos de linha com base em alteração. Eles não podem ser usados para tratar de outros tipos de conflitos como falhas de inserção devido a violações de PRIMARY KEY ou violações de restrições de índice exclusivo. |
Para criar um resolvedor de conflitos personalizado com base em procedimentos armazenados
No Publicador em cada publicação ou banco de dados msdb, crie um novo procedimento armazenado de sistema que implementa os seguintes parâmetros requeridos:
Parâmetro
Tipo de dados
Descrição
@tableowner
sysname
Nome do proprietário da tabela para a qual um conflito está estando resolvido. Esse é o proprietário para a tabela no banco de dados de publicação.
@tablename
sysname
Nome da tabela para a qual um conflito está estando resolvido.
@rowguid
uniqueidentifier
Identificador exclusivo para a linha que tem o conflito.
@subscriber
sysname
Nome do servidor de onde uma alteração conflitante está sendo propagada.
@subscriber_db
sysname
Nome do banco de dados de onde uma alteração conflitante está sendo propagada.
@log_conflict OUTPUT
int
Se o processo de mesclagem deveria registrar um conflito para resolução posterior:
0 = Não registre o conflito.
1 = O Assinante é o perdedor de conflito.
2 = O Publicador é o perdedor de conflito.
@conflict_message OUTPUT
nvarchar(512)
Mensagem a ser dada sobre a resolução se o conflito for registrado.
@destowner
sysname
O proprietário da tabela publicada no Assinante.
Esse procedimento armazenado usa os valores passados pelo Merge Agent para esses parâmetros para implementar sua lógica de resolução de conflito personalizada; ele deverá retornar um conjunto de resultados de linha única que é idêntico em estrutura à tabela base e contem os valores de dados para a versão vencedora da linha.
Conceda permissões EXECUTE no procedimento armazenado para qualquer logon usado por Assinantes para conexão com o Publicador.
Para usar um resolvedor de conflito personalizado com um novo artigo de tabela
- Execute sp_addmergearticle para definir um artigo, especificando o valor de Resolvedor de Procedimentos Armazenados doMicrosoft SQL Server para o parâmetro @article_resolver e o nome do procedimento armazenado que implementa a lógica do resolvedor de conflitos para o parâmetro @resolver_info. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).
Para usar um resolvedor de conflito personalizado com um artigo de tabela existente
Execute sp_changemergearticle, especificando @publication, @article, um valor de article_resolver para @property e um valor de Resolvedor de Procedimentos Armazenados doMicrosoft SQL Server para @value.
Execute sp_changemergearticle, especificando @publication, @article, um valor de resolver_info para @property, e o nome do procedimento armazenado que implementa a lógica do resolvedor de conflitos para @value.