Replicação de mesclagem avançada – detecção e resolução de conflito
Aplica-se a: SQL Server
Quando o Publicador e o Assinante estão conectados e ocorre a sincronização, o Agente de Mesclagem detecta se há algum conflito. Se forem detectados conflitos, o Agente de Mesclagem usará o resolvedor de conflitos (especificado quando um artigo é adicionado à publicação) para determinar quais dados serão aceitos e propagados para outros sites.
A replicação de mesclagem oferece uma variedade de métodos para detectar e resolver conflitos. Com relação à maioria dos aplicativos, o método padrão é apropriado.
- Se um conflito ocorrer entre um Publicador e um Assinante, a alteração do Publicador é mantida e a alteração do Assinante é descartada.
- Se ocorrer um conflito entre dois Assinantes que usam assinaturas de cliente (tipo padrão para assinaturas pull), a alteração do primeiro Assinante para sincronizar com o Publicador é mantida, e a alteração do segundo Assinante é descartada. Para obter informações sobre como especificar assinatura de cliente e servidor, consulte Especificar um tipo de assinatura de mesclagem e prioridade de resolução de conflitos (SQL Server Management Studio).
- Em caso de conflito entre dois Assinantes que usam assinaturas de servidor (tipo padrão para assinaturas push), a alteração do Assinante com o maior valor da prioridade será mantida, e a alteração do segundo Assinante será descartada. Se os valores de prioridade forem iguais, a alteração do primeiro Assinante a sincronizar com o Publicador será mantida.
Observação
Embora o Assinante esteja sincronizado com o Publicador, os conflitos ocorrem normalmente entre as atualizações que são feitas em diferentes Assinantes, em vez de atualizações sendo feitas no Assinante e no Publicador.
O comportamento da detecção e resolução de conflitos depende das seguintes opções, descritas neste tópico:
Especificação de controle em nível de coluna; controle em nível de linha ou controle em nível de registro lógico.
Especificação do mecanismo padrão de resolução, com base na prioridade, ou especificação de um resolvedor de artigo. Um resolvedor de artigo pode ser:
- Um manipulador de lógica de negócios escrito em código gerenciado.
- Um resolvedor personalizadocom base em COM.
- Um resolvedor baseado em COM fornecido pela Microsoft.
Se o mecanismo de resolução padrão for usado, o comportamento será determinado posteriormente pelo tipo de assinatura usada: de cliente ou servidor.
Detecção de conflito
Se uma alteração de dados se qualifica ou não como conflito vai depender do tipo de controle de conflitos definido para o artigo:
- Quando o controle em nível de coluna for selecionado, ele será considerado conflito se as alterações forem feitas na mesma coluna, na mesma linha, em mais de um nó de replicação.
- Caso o controle em nível de linha seja selecionado, será considerado conflito se as alterações forem feitas em todas as colunas, na mesma linha e em mais de um nó de replicação (não é necessário que as colunas afetadas nas linhas correspondentes sejam as mesmas).
- Caso o controle em nível de registro lógico seja selecionado, será considerado conflito se as alterações forem feitas em todas as linhas, no mesmo registro lógico e em mais de um nó de replicação (as colunas afetadas nas linhas correspondentes não precisam ser as mesmas).
Para obter mais informações, consulte Detectando e resolvendo conflitos em registros lógicos.
Para especificar o acompanhamento de conflito e o nível de resolução para um artigo, confira Especificar as propriedades de replicação de mesclagem.
Resolução de conflitos
Após a detecção de um conflito, o Agente de Mesclagem inicia o resolvedor do conflito selecionado e usa o resolvedor para determinar o vencedor do conflito. A linha vencedora é aplicada ao Publicador e ao Assinante, e os dados da linha perdedora são gravados em uma tabela de conflitos. Os conflitos estão resolvidos imediatamente após a execução do resolvedor, a menor que se opte por resolver conflitos de forma interativa.
Resolver conflitos de replicação de mesclagem
Aplica-se a: SQL Server
Quando o Publicador e o Assinante estão conectados e ocorre a sincronização, o Agente de Mesclagem detecta se há algum conflito. Se houver conflitos detectados, o Agente de Mesclagem utiliza um resolvedor de conflitos para determinar quais dados serão aceitos e propagados para outros sites.
Observação
Embora o Assinante esteja sincronizado com o Publicador, os conflitos ocorrem normalmente entre as atualizações feitas em diferentes Assinantes, em lugar de atualizações feitas no Assinante e no Publicador.
A replicação de mesclagem oferece uma variedade de métodos para detectar e resolver conflitos. Com relação à maioria dos aplicativos, o método padrão é apropriado.
Se um conflito ocorrer entre um Publicador e um Assinante, a alteração do Publicador é mantida e a alteração do Assinante é descartada.
Se ocorrer um conflito entre dois Assinantes que usam assinaturas de cliente (tipo padrão para assinaturas pull), a alteração do primeiro Assinante para sincronizar com o Publicador é mantida, e a alteração do segundo Assinante é descartada. Para obter informações sobre como especificar assinatura de cliente e servidor, consulte Especificar um tipo de assinatura de mesclagem e prioridade de resolução de conflitos (SQL Server Management Studio).
Em caso de conflito entre dois Assinantes que usam assinaturas de servidor (tipo padrão para assinaturas push), a alteração do Assinante com o maior valor da prioridade será mantida, e a alteração do segundo Assinante será descartada. Se os valores de prioridade forem iguais, a alteração do primeiro Assinante a sincronizar com o Publicador será mantida.
Para obter mais informações sobre a detecção de conflito e resolução para replicação de mesclagem, consulte Advanced Merge Replication Conflict Detection and Resolution.
Tipos de resolvedores
Na replicação de mesclagem, a resolução de conflitos ocorre no âmbito do artigo. Com relação às publicações compostas de vários artigos, pode haver diferentes resolvedores de conflitos servindo diferentes artigos ou um único resolvedor de conflitos servindo um artigo, vários artigos ou todos os artigos contidos em uma publicação.
Se o plano é usar o resolvedor padrão de conflitos com base na prioridade, não é necessário definir a propriedade de resolvedor de um artigo. Para usar um resolvedor de artigos em vez do resolvedor padrão, é preciso definir a propriedade do resolvedor do artigo a ser usado, selecionando um resolvedor disponível no Publicador. Quaisquer informações específicas que precisem ser passadas ao resolvedor podem igualmente ser especificadas na propriedade de informações do resolvedor.
A replicação de mesclagem oferece quatro tipos de resolvedores de conflito:
O resolvedor de conflito padrão com base em prioridade
O mecanismo de resolução padrão comporta-se de forma diferente, dependendo se a assinatura for uma assinatura de cliente ou uma assinatura de servidor. Valores de prioridade são atribuídos a Assinantes individuais que usam as assinaturas de servidor; as alterações feitas no nó com a mais alta prioridade vencem todos os conflitos. Para assinaturas de cliente, a primeira alteração gravada no Publicador vence o conflito.
Após a criação de uma assinatura, ela não pode ser alterada de um tipo para outro.
Manipulador de lógica de negócios
A estrutura do manipulador de lógica comercial permite que você grave um assembly de código gerenciado que é chamado durante o processo de sincronização de mesclagem. O assembly inclui a lógica comercial que pode corresponder a conflitos e a uma série de outras condições durante a sincronização. Para obter mais informações, consulte Executar lógica de negócios durante a sincronizações de mesclagem.
Resolvedor personalizado baseado em COM
A replicação de mesclagem fornece uma API para gravar resolvedores como objetos COM em linguagens como Microsoft Visual C++ ou Microsoft Visual Basic. Para obter mais informações, consulte COM-Based Custom Resolvers.
Um resolvedor baseado em COM fornecido pela Microsoft
O Microsoft SQL Server inclui vários resolvedores baseados em COM. Para obter mais informações, consulte Resolvedores Microsoft baseados em COM.
Para mais informações sobre como selecionar um tipo adequado de resolvedor, consulte Escolher um resolvedor.
Observação
Alguns resolvedores de artigo são escritos para controlar conflitos apenas em determinadas operações. Por exemplo, um resolvedor poderia controlar atualizações, mas não inserções ou exclusões. O solucionador de conflito padrão baseado em prioridade controla todos os conflitos não controlados pelo resolvedor de artigo.
Para especificar um tipo de assinatura de mesclagem e prioridade de resolução de conflito, consulte
SQL Server Management Studio: especifique o tipo de assinatura de mesclagem e a prioridade de resolução de conflitos (SQL Server Management Studio)
Programação Transact-SQL de replicação e programação RMO (Replication Management Objects): Create a Pull Subscription e Create a Push Subscription
Resolvedor Interativo
A replicação fornece uma interface de usuário de Resolvedor Interativo que pode ser usada tanto em conjunto com o resolvedor padrão de conflitos, baseado em prioridade, como com o resolvedor de artigo. Ao realizar a sincronização sob demanda por meio do Gerenciador de Sincronização do Microsoft Windows, o Resolvedor Interativo exibe os dados do conflito em tempo real e permite que se opte pela forma de resolução dos conflitos. Para obter mais informações sobre como ativar resolução interativa e iniciar o Resolvedor Interativo, consulte Interactive Conflict Resolution.
Exibindo conflitos
A maneira mais direta de visualizar os conflitos é usar o Visualizador de Conflitos de Replicação, disponível no SQL Server Management Studio (o SQL Server também fornece procedimentos armazenados que permitem que as tabelas de conflito sejam consultadas). O Visualizador de Conflitos e o Resolvedor Interativo são ferramentas semelhantes, mas o Resolvedor Interativo permite resolver conflitos à medida que a sincronização ocorre, enquanto o Visualizador de Conflitos foi projetado para exibir os conflitos após eles terem sido resolvidos. Se os metadados de conflito ainda estiverem disponíveis nas tabelas do sistema (metadados de conflito são retidos por 14 dias, por padrão), será possível substituir os resultados da resolução de conflitos no Visualizador de Conflitos; contudo, se a intervenção direta for necessária de maneira regular, o melhor será usar o Resolvedor Interativo.
Observação
Não são exibidos conflitos que envolvem registros lógicos no Visualizador de Conflitos. Para exibir informações sobre esses conflitos, use procedimentos armazenados de replicação. Para obter mais informações, consulte Exibir informações sobre conflitos em publicações de mesclagem (Programação Transact-SQL de replicação).
O Visualizador de Conflitos exibe informações de três tabelas do sistema:
A replicação cria uma tabela de conflitos para cada tabela em um artigo de mesclagem, com um nome na forma MSmerge_conflict_<PublicationName>_<ArticleName>.
As tabelas de conflitos têm a mesma estrutura das tabelas em que foram baseadas. Uma linha em uma dessas tabelas consiste na versão perdedora de uma linha de conflito (a versão vencedora da linha fica na tabela real do usuário).
A tabela MSmerge_conflicts_info fornece informações sobre cada conflito, inclusive o tipo de conflito.
A tabela sysmergearticles identifica quais tabelas de usuário têm tabelas de conflitos e fornecem informações sobre as tabelas de conflitos.
Por padrão, as informações sobre conflitos são armazenadas:
No Publicador e no Assinante, caso o nível de compatibilidade da publicação for 90RTM ou superior.
No Publicador, caso o nível de compatibilidade da publicação seja inferior a 80RTM.
No Publicador, se os Assinantes estiverem executando o SQL Server Compact. Os dados de conflito não podem ser armazenados nos Assinantes do SQL Server Compact.
Para exibir conflitos
SQL Server Management Studio: exibir e resolver conflitos de dados para publicações de mesclagem (SQL Server Management Studio)
Programação Transact-SQL de replicação: Exibir informações de conflito para publicações de mesclagem (Programação Transact-SQL de replicação)