Resolução de conflitos para Replicação de Fusão

Aplica-se a: SQL Server

Os conflitos na replicação de fusão são resolvidos com base no resolvedor especificado para cada artigo. Por defeito, os conflitos são resolvidos sem necessidade de intervenção do utilizador. Mas os conflitos podem ser visualizados, e o resultado da resolução pode ser alterado, no Microsoft Replication Conflict Viewer.

Os dados de conflito estão disponíveis no Visualizador de Conflitos de Replicação durante o período de tempo especificado para o período de retenção de conflitos (com uma predefinição de 14 dias). Para definir o período de retenção de conflitos, execute um dos seguintes procedimentos:

Por padrão, as informações de conflito são armazenadas:

  • No Editor e no Assinante, se o nível de compatibilidade da publicação for 90RTM ou superior.
  • No Editor de Publicação, se o nível de compatibilidade da publicação for inferior a 80RTM.
  • No Publisher se os Assinantes estiverem executando o SQL Server Compact. Os dados de conflito não podem ser armazenados em assinantes do SQL Server Compact.

O armazenamento de informações sobre conflitos é controlado pela propriedade de publicação conflict_logging. Para mais informações, veja sp_addmergepublication (Transact-SQL) e sp_changemergepublication (Transact-SQL).

Conflitos também podem ser resolvidos de forma interativa durante a sincronização usando o Microsoft Interactive Resolver. O Resolver Interativo está disponível através do Gestor de Sincronização Microsoft Windows. Para mais informações, consulte Sincronizar uma Subscrição Usando o Gestor de Sincronização do Windows (Gestor de Sincronização do Windows).

Resolver conflitos

  1. Ligue-se ao Publisher (ou Subscriber, se apropriado) no Microsoft SQL Server Management Studio e depois expanda o nó servidor.

  2. Expanda a pasta Replicação e depois expanda a pasta Publicações Locais .

  3. Clique com o botão direito na publicação para a qual pretende ver conflitos e depois clique em Ver Conflitos.

    Note

    Se especificou um valor de 'assinante' para a propriedade conflict_logging , a opção do menu Ver Conflitos não está disponível. Para ver conflitos, inicie ConflictViewer.exe a partir do prompt de comandos. Por defeito, ConflictViewer.exe está localizado no seguinte diretório: Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE. Para uma lista de parâmetros de arranque válidos, execute ConflictViewer.exe -?.

  4. Na caixa de diálogo Selecionar Tabela de Conflitos , selecione uma base de dados, uma publicação e uma tabela para visualizar os conflitos.

  5. No Visualizador de Conflitos de Replicação, pode:

    • Filtra as linhas com os botões à direita da grelha superior.

    • Selecione uma linha na grelha superior para mostrar a informação dessa linha na grelha inferior.

    • Selecione uma ou mais linhas na grelha superior e depois clique em Remover, o que equivale a clicar no botão Enviar Vencedor (sem fazer alterações aos dados).

    • Clique no botão de propriedades (...) para ver mais informações sobre uma coluna envolvida num conflito.

    • Edite os dados na coluna vencedor do conflito ou perdedor do conflito antes de submeter os dados (os dados são apenas leitura se a coluna for cinzenta).

    • Clique em Enviar Vencedor para aceitar a linha designada como vencedora do conflito.

    • Clique em Enviar Perdedor para sobrepor a resolução e propagar o valor designado como perdedor do conflito para todos os nós da topologia.

    • Selecione Registar os detalhes deste conflito para registar os dados do conflito num ficheiro. Para especificar uma localização para o ficheiro, aponte para o menu Visualizar e depois clique em Opções. Introduza um valor, ou clique no botão de navegar (...), e depois navegue até ao ficheiro apropriado. Clica em OK para sair da caixa de diálogo Opções .

  6. Feche o visualizador de conflitos de replicação.

Ver informações sobre conflitos

Quando um conflito é resolvido na replicação de fusão, os dados da linha perdedora são escritos numa tabela de conflitos. Estes dados de conflito podem ser visualizados programaticamente através de procedimentos armazenados de replicação. Para mais informações, consulte Deteção e Resolução Avançada de Conflitos de Replicação de Fusão.

  1. Na base de dados de publicação do Publicador, execute sp_helpmergepublication. Note os valores das seguintes colunas no conjunto de resultados:

    • centralized_conflicts - 1 indica que as linhas de conflito são armazenadas na Publisher, e 0 indica que as linhas de conflito não são armazenadas na Publisher.

    • decentralized_conflicts - 1 indica que as linhas de conflito são armazenadas no Assinante, e 0 indica que as linhas de conflito não estão armazenadas no Assinante.

      Note

      O comportamento de registo de conflitos de uma publicação de fusão é definido usando o @conflict_logging parâmetro de sp_addmergepublication. A utilização do @centralized_conflicts parâmetro foi descontinuada.

    A tabela seguinte descreve os valores destas colunas com base no valor especificado para @conflict_logging.

    @conflict_logging valor conflitos_centralizados conflitos_descentralizados
    editora 1 0
    assinante 0 1
    ambos 1 1
  2. Quer no Publisher da base de dados de publicação, quer no Subscriber da base de dados de subscrição, execute o comando sp_helpmergearticleconflicts. Especifique um valor para @publication para devolver apenas informações sobre conflitos para artigos que pertençam a uma publicação específica. Isto devolve informação da tabela de conflitos para artigos com conflitos. Anote o valor de conflict_table para quaisquer artigos relevantes. Se o valor de conflict_table para um artigo for NULO, apenas ocorreram conflitos de eliminação neste artigo.

  3. (Opcional) Reveja as linhas em conflito dos artigos de interesse. Dependendo dos valores de centralized_conflicts e decentralized_conflicts do passo 1, faça um dos seguintes:

    • No Publicador, na base de dados de publicação, execute sp_helpmergeconflictrows. Especifique uma tabela de conflitos para o artigo (do passo 1) para @conflict_table. (Opcional) Especifique um valor de @publication para restringir a informação de conflito devolvida a uma publicação específica. Isto devolve os dados da linha e outras informações para a linha que perdeu.

    • No subscritor, na base de dados de subscrição, execute sp_helpmergeconflictrows. Especifique uma tabela de conflitos para o artigo (do passo 1) para @conflict_table. Isto devolve dados da linha e outras informações para a linha perdedora.

Conflito onde a eliminação falhou

  1. Na base de dados de publicação do Publicador, execute sp_helpmergepublication. Note os valores das seguintes colunas no conjunto de resultados:

    • centralized_conflicts - 1 indica que as linhas de conflito são armazenadas na Publisher, e 0 indica que as linhas de conflito não são armazenadas na Publisher.

    • decentralized_conflicts - 1 indica que as linhas de conflito são armazenadas no Assinante, e 0 indica que as linhas de conflito não estão armazenadas no Assinante.

      Note

      O comportamento de registo de conflitos numa publicação de fusão é definido usando o @conflict_logging parâmetro de sp_addmergepublication. A utilização do @centralized_conflicts parâmetro foi descontinuada.

  2. Quer no Publisher da base de dados de publicação, quer no Subscriber da base de dados de subscrição, execute o comando sp_helpmergearticleconflicts. Especifique um valor para @publication para devolver apenas informação da tabela de conflitos para os artigos que pertençam a uma publicação específica. Isto devolve informação da tabela de conflitos para artigos com conflitos. Note o valor da source_object para quaisquer artigos de interesse. Se o valor de conflict_table para um artigo for NULO, apenas ocorreram conflitos de eliminação neste artigo.

  3. (Opcional) Revise a informação dos conflitos para eliminar conflitos. Dependendo dos valores de centralized_conflicts e decentralized_conflicts do passo 1, faça um dos seguintes:

    • No Publicador, na base de dados de publicação, execute sp_helpmergedeleteconflictrows. Especifique o nome da tabela fonte (do passo 1) onde ocorreu o conflito para @source_object. (Opcional) Especifique um valor de @publication para restringir a informação de conflito devolvida a uma publicação específica. Isto devolve a exclusão das informações de conflito armazenadas no Publisher.

    • No Subscritor, na base de dados de subscrição, execute sp_helpmergedeleteconflictrows. Especifique o nome da tabela fonte (do passo 1) onde ocorreu o conflito para @source_object. (Opcional) Especifique um valor de @publication para restringir a informação de conflito devolvida a uma publicação específica. Isto retorna informações sobre conflitos de eliminação armazenadas no Subscritor.