Especificar propriedades da Replicação de Mesclagem

Aplica-se a:SQL Server

Este tópico explica como especificar várias propriedades para sua replicação de mesclagem.

O artigo de mesclagem está disponível somente para download

Artigos somente para download são destinados a aplicativos com dados que não são atualizados nos assinantes. Para obter mais informações, consulte Otimizar o desempenho da replicação de mesclagem com artigos somente para download.

Considerações

  • Se você especificar que um artigo é apenas para download depois que as assinaturas tiverem sido inicializadas, todas as assinaturas de cliente que receberam o artigo deverão ser reinicializadas. As assinaturas de servidor não têm que ser reinicializadas. Para obter mais informações sobre os efeitos das alterações de propriedades, consulte Alterar propriedades da publicação e do artigo.

Usar o SQL Server Management Studio

Na página Artigos

Na página Artigos do Assistente para Nova Publicação, selecione uma tabela, depois marque a caixa de seleção A tabela realçada é somente para download.

Na guia “Propriedades” de Propriedades do Artigo

  1. Na página Artigos do Assistente para Nova Publicação ou na caixa de diálogo Propriedades da Publicação – <Publicação>, selecione uma tabela e clique em Propriedades do Artigo.

  2. Clique em Definir Propriedades do Artigo Realçado na Tabela ou Definir as Propriedades de Todos os Artigos de Tabela.

  3. Na seção Objeto de Destino da guia Propriedades da caixa de diálogo Propriedades do Artigo – <Artigo>, especifique um dos valores a seguir para Direção de sincronização:

    • Baixar para o assinante, proibir que o assinante faça alterações
    • Baixar para o Assinante, permitir alterações do Assinante
  4. Se você estiver na caixa de diálogo Propriedades da Publicação – <Publicação>, clique em OK para salvar e fechar a caixa de diálogo.

Usar Transact-SQL

Novo artigo

  1. Execute sp_addmergearticle, especificando um valor de 1 ou 2 para o parâmetro @subscriber_upload_options. Os números correspondem ao seguinte comportamento:

    • 0 - Nenhuma restrição (padrão). As alterações feitas no Assinante são enviadas para o Publicador.
    • 1 - As alterações são permitidas no Assinante, mas não são enviadas ao Publicador.
    • 2 - As alterações não são permitidas no Assinante.

    Observação

    Se a tabela de origem para um artigo já estiver publicada em outra publicação, o valor de @subscriber_upload_options deverá ser o mesmo para os dois artigos.

Artigo existente

  1. Para determinar se um artigo é somente para download, execute sp_helpmergearticle e verifique o valor de upload_options para o artigo no conjunto de resultados.

  2. Se o valor retornado na etapa 1 for 0, execute sp_changemergearticle, especificando um valor de subscriber_upload_options para @property, um valor de 1 para @force_invalidate_snapshot e @force_reinit_subscription, e um valor de 1 ou 2 para @value, o que corresponde ao seguinte comportamento:

    • 1 - As alterações são permitidas no Assinante, mas não são enviadas ao Publicador.

    • 2 - As alterações não são permitidas no Assinante.

      Observação

      Se a tabela de origem para um artigo já estiver publicada em outra publicação, o comportamento de somente download deve ser o mesmo para os dois artigos.

Resolução interativa de conflitos

A Replicação do Microsoft SQL Server fornece um Resolvedor Interativo, que permite a resolução de conflitos de forma manual durante a sincronização sob demanda no Gerenciador de Sincronização do Microsoft Windows. Depois que a resolução interativa estiver habilitada, resolva os conflitos interativamente durante a sincronização, usando o Resolvedor Interativo. O Resolvedor Interativo está disponível pelo Gerenciador de Sincronização do Microsoft Windows. Para obter mais informações, consulte Como sincronizar uma assinatura usando o Gerenciador de Sincronização do Windows (Gerenciador de Sincronização do Windows).

Recomendações

  • Se uma sincronização for executada fora do Gerenciador de Sincronização do Windows (como sincronização agendada ou uma sincronização sob demanda no SQL Server Management Studio ou no Replication Monitor), os conflitos serão resolvidos automaticamente sem a intervenção de usuário, usando a resolução de conflitos padrão especificada para o artigo. Para obter mais informações, consulte Resolução de conflito interativo.

Usar o SQL Server Management Studio

Habilitar a resolução de conflitos interativa para um artigo

  1. Na página Artigos do Assistente para Nova Publicação ou na caixa de diálogo Propriedades de Publicação – <Publicação>, selecione uma tabela. Para obter mais informações sobre como usar o assistente e acessar a caixa de diálogo, consulte Criar uma publicação e Exibir e modificar as propriedades da publicação.
  2. Clique em Propriedades de Artigose então clique em Definir Propriedades do Artigo Realçado da Tabela ou Definir Propriedades de Todos os Artigos da Tabela.
  3. Na página Propriedades do Artigo – <Artigo> ou Propriedades do Artigo – <ArticleType>, clique na guia Resolvedor.
  4. Selecione Permitir que o Assinante resolva conflitos interativamente durante a sincronização sob demanda
  5. Selecione OK.
  6. Se você estiver na caixa de diálogo Propriedades da Publicação – <Publicação>, clique em OK para salvar e fechar a caixa de diálogo.

Especificar que uma assinatura deve usar a resolução de conflitos interativa

  1. Na caixa de diálogo Propriedades da Assinatura – <Subscriber>: <SubscriptionDatabase>, especifique o valor True para a opção Resolver os conflitos interativamente. Para obter mais informações sobre como acessar essa caixa de diálogo, consulte View and Modify Push Subscription Properties e View and Modify Pull Subscription Properties.
  2. Selecione OK.

Usar Transact-SQL

É possível especificar de forma programada se um Assinante usará essa interface gráfica para resolver conflitos de artigos quando uma assinatura pull para uma publicação de mesclagem é criada. Só conflitos em artigos que têm suporte para esta opção serão exibidos no Resolvedor Interativo.

Criar uma assinatura pull de mesclagem que usa o Resolvedor Interativo

  1. No servidor Publicador, no banco de dados de publicação, execute sp_helpmergearticle, especificando @publication. Anote o valor de allow_interactive_resolver para cada artigo no conjunto de resultados para o qual o Resolvedor Interativo será usado.
    • Se este valor for 1, o Resolver Interativo será utilizado.
    • Se este valor for 0, você deverá primeiro habilitar o Resolvedor Interativo de cada artigo. Para tanto, execute o sp_changemergearticle, especificando @publication, @article, um valor de allow_interactive_resolver para @property, e um valor de true para @value.
  2. No Assinante, no banco de dados de assinatura, execute o sp_addmergepullsubscription. Para obter mais informações, consulte Create a Pull Subscription.
  3. No Publicador do banco de dados de assinatura, execute o sp_addmergepullsubscription_agent, especificando os seguintes parâmetros:
    • @publisher, @publisher_db (o banco de dados publicado) e @publication.
    • Um valor de true para @enabled_for_syncmgr.
    • Um valor de true para @use_interactive_resolver.
    • As informações da conta de segurança exigidas pelo Agente de Mesclagem. Para obter mais informações, consulte Create a Pull Subscription.
  4. No Publicador, no banco de dados de publicação, execute sp_addmergesubscription.

Definir um artigo que tem suporte para o Resolvedor Interativo

  1. No servidor Publicador, no banco de dados de publicação, execute sp_addmergearticle. Especifique o nome da publicação à qual o artigo pertence, para @publication; um nome para o artigo para @article, um objeto de banco de dados sendo publicado para @source_object, e um valor de true para @allow_interactive_resolver. Para obter mais informações, consulte Define an Article.

Nível de resolução e acompanhamento de conflitos para artigos de mesclagem

Este tópico descreve como especificar o nível de acompanhamento e resolução de conflitos para artigos de mesclagem no SQL Server usando o SQL Server Management Studio ou o Transact-SQL.

Quando uma assinatura de uma publicação de mesclagem é sincronizada, a replicação verifica se há conflitos causados por alterações feitas nos mesmos dados tanto no Publicador quanto no Assinante. Especifique se os conflitos serão detectados no nível da linha, onde todas as alterações de linha são consideradas conflito, ou no nível da coluna, onde apenas as alterações da mesma linha e da coluna são consideradas conflito. A resolução de conflitos para artigos é realizada no nível de linha. Para obter mais informações sobre a detecção e a resolução de conflitos quando registros lógicos são usados, consulte Detecting and Resolving Conflicts in Logical Records.

Limitações e Restrições

  • Se você alterar o nível de controle depois de inicializadas as assinaturas, essas assinaturas deverão ser reinicializadas. Para obter mais informações sobre os efeitos das alterações de propriedades, consulte Alterar propriedades da publicação e do artigo.
  • Com rastreamento em nível de linha e de coluna, a resolução de conflitos é sempre realizada em nível de linha: a linha vencedora substitui a linha perdedora. A replicação de mesclagem também permite especificar que os conflitos sejam rastreados e resolvidos em nível de registro lógico, mas essas opções não estão disponíveis no SQL Server Management Studio. Para obter informações sobre como definir essas opções por meio de procedimentos armazenados de replicação, consulte Definir uma relação de registro lógico entre artigos de tabela de mesclagem.

Usar o SQL Server Management Studio

Especifique o rastreamento em nível de linha ou de coluna para artigos de mesclagem na guia Propriedades da caixa de diálogo Propriedades do Artigo, que está disponível no Assistente para Nova Publicação e na caixa de diálogo Propriedades da Publicação - <Publicação>. Para obter mais informações sobre como usar o assistente e acessar a caixa de diálogo, consulte Criar uma publicação e Exibir e modificar as propriedades da publicação.

Especificar rastreamento em nível de linha ou coluna

  1. Na página Artigos do Assistente para Nova Publicação ou na caixa de diálogo Propriedades de Publicação – <Publicação>, selecione uma tabela.
  2. Clique em Propriedades de Artigose então clique em Definir Propriedades do Artigo Realçado da Tabela ou Definir Propriedades de Todos os Artigos da Tabela.
  3. Na guia Propriedades da caixa de diálogo Propriedade do Artigo <Artigo>, selecione um dos seguintes valores para a propriedade Nível de rastreamento: Rastreamento em nível de linha ou Rastreamento em nível de coluna.
  4. Se você estiver na caixa de diálogo Propriedades da Publicação – <Publicação>, clique em OK para salvar e fechar a caixa de diálogo.

Usar Transact-SQL

Para especificar as opções de rastreamento de conflitos para um novo artigo de mesclagem

  1. No Publicador, no banco de dados de publicação, execute sp_addmergearticle e especifique um dos seguintes valores para @column_tracking:

    • true - Use rastreamento no nível da coluna do artigo.
    • false - Use o rastreamento no nível da linha, que é o padrão.

Alterar as opções de rastreamento de conflitos de um artigo de mesclagem

  1. Para determinar as opções de rastreamento de conflito para um artigo de mesclagem, execute sp_helpmergearticle. Observe o valor da opção column_tracking no conjunto de resultados do artigo. Um valor de 1 significa que o controle no nível da coluna está em uso, e o valor de 0 significa que o controle no nível da linha está em uso.

  2. No Publicador, no banco de dados de publicação, execute sp_changemergearticle. Especifique um valor de column_tracking para @property e um dos valores a seguir para @value:

    • true - Usar rastreamento no nível da coluna para o artigo.
    • false - Use rastreamento no nível de linha, que é o padrão.

    Especifique um valor de 1 para @force_invalidate_snapshot e @force_reinit_subscription.

Gerenciar exclusões rastreadas

Observação

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Por padrão, a replicação de mesclagem sincroniza comandos DELETE entre o Publicador e o Assinante. A replicação de mesclagem permite reter linhas no banco de dados da assinatura mesmo quando elas tiverem sido excluídas da publicação, e vice-versa. Você pode especificar programaticamente que os comandos DELETE sejam ignorados ao criar um novo artigo, ou pode habilitar essa funcionalidade posteriormente usando procedimentos armazenados de replicação.

Importante

Habilitar essa funcionalidade resultará em não convergência, o que significa que os dados presentes no Assinante não refletirão dados no Publicador da forma correta. É preciso implementar um mecanismo próprio para remover manualmente as linhas excluídas.

Especificar que as exclusões sejam ignoradas para um novo artigo de mesclagem

No Publicador, no banco de dados de publicação, execute sp_addmergearticle (Transact-SQL). Especifique um valor de false para @delete_tracking. Para obter mais informações, consulte Define an Article.

Observação

Se a tabela de fonte de um artigo já estiver publicada em outra publicação, o valor de delete_tracking deverá ser o mesmo de ambos os artigos.

Especificar que as exclusões sejam ignoradas para um artigo de mesclagem existente

  1. Para determinar se a compensação de erro está habilitada para um artigo, execute sp_helpmergearticle (Transact-SQL) e observe o valor de delete_tracking no conjunto de resultados. Se esse valor for 0, as exclusões já estão sendo ignoradas.

  2. Se o valor da etapa 1 for 1, execute sp_changemergearticle (Transact-SQL) no Publicador, no banco de dados de publicação. Especifique um valor de delete_tracking para @property, e um valor de false para @value.

    Observação

    Se a tabela de fonte de um artigo já estiver publicada em outra publicação, o valor de delete_tracking deverá ser o mesmo de ambos os artigos.

Ordem de processamento

A replicação de mesclagem permite que você especifique a ordem em que artigos são processados pelo Agente de Mesclagem durante o processo de sincronização. Você pode atribuir uma ordem a cada artigo programaticamente ao criar um artigo usando procedimentos armazenados de replicação. Os artigos são processados em ordem do menor para o maior valor. Se dois artigos tiverem o mesmo valor, serão processados simultaneamente.

Como a ordem de processamento é determinada

Durante a sincronização da mesclagem, os artigos são, por padrão, processados na ordem exigida pelas dependências entre objetos, incluindo as limitações de integridade referencial declarativa (DRI) definidas nas tabelas de base. O processamento envolve a enumeração das alterações em uma tabela e depois a aplicação dessas alterações. Se não houver DRI presente, mas existirem filtros de junção ou registros lógicos entre artigos de tabela, os artigos serão processados na ordem exigida pelos filtros e registros lógicos. Os artigos que não se relacionam a nenhum outro artigo por meio de DRI, filtros de junção, registros lógicos ou outras dependências serão processados segundo o apelido do artigo na tabela do sistema do sysmergearticles (Transact-SQL).

Considere uma publicação que inclua as tabelas SalesOrderHeader e SalesOrderDetail com uma coluna de chave primária SalesOrderID na tabela SalesOrderHeader e uma coluna de chave estrangeira correspondente SalesOrderID na tabela SalesOrderDetail . Durante a sincronização, a replicação de mesclagem impede violações de chave estrangeira ao inserir qualquer linha nova em SalesOrderHeader antes de inserir linhas associadas em SalesOrderDetail. Do mesmo modo, linhas são excluídas de SalesOrderDetail antes de a linha associada ser excluída de SalesOrderHeader.

Porém, em alguns aplicativos a integridade referencial é imposta por meio de gatilhos de banco de dados, ou no nível do aplicativo, e não por meio de DRI. Considerando a publicação descrita acima, em vez de DRI, a tabela SalesOrderDetail poderia ter um gatilho de inserção que garanta que a linha associada na tabela SalesOrderHeader existe antes de permitir uma inserção. SalesOrderHeader poderia ter um gatilho de exclusão que garante que não há nenhuma linha associada em SalesOrderDetail antes de permitir uma exclusão. A replicação de mesclagem não leva em conta os gatilhos ao determinar a ordem de processamento de artigos porque não pode determinar qual será o resultado do gatilho até que ele tenha sido acionado. Do mesmo modo, a replicação não pode levar em conta as restrições definidas no nível do aplicativo.

Quando a integridade referencial é mantida por meio de gatilhos ou no nível do aplicativo, você deve especificar a ordem em que os artigos devem ser processados. No exemplo com gatilhos, você especificaria que a tabela SalesOrderHeader deve ser processada antes de SalesOrderDetail, porque a ordem dos artigos é baseada na ordem de inserção. A replicação de mesclagem reverterá automaticamente a ordem das operações de exclusão. A replicação de mesclagem não falhará na ausência de ordenação dos artigos, porque o Agente de Mesclagem continua a processar os artigos se ocorrer uma violação de restrição; depois que os outros artigos tiverem sido processados, ele tenta novamente quaisquer operações que falharam. Especificar a ordem de artigos simplesmente evita as novas tentativas e o processamento adicional associado a elas. Se você especificar uma ordem incorreta (por exemplo, uma que faça com que os registros detalhados sejam processados antes dos registros do cabeçalho), a replicação de mesclagem irá tentar o processamento repetidamente, até obter êxito.

Novo artigo

  1. No Publicador, no banco de dados de publicação, execute sp_addmergearticle (Transact-SQL). Especifique um valor inteiro que representa a ordem de processamento do artigo para @processing_order. Para obter mais informações, consulte Define an Article.

    Observação

    Ao criar artigos ordenados, você deverá deixar intervalos entre os valores de ordem de artigo. Isto facilitará a definição de novos valores no futuro. Por exemplo, se você tiver três artigos para os quais precisa que especificar uma ordem de processamento fixa, defina o valor do @processing_order como 10, 20 e 30 em vez de 1, 2 e 3, respectivamente.

Artigo existente

  1. Para determinar a ordem de processamento de um artigo, execute sp_helpmergearticle (Transact-SQL) e observe o valor de processing_order no conjunto de resultados.
  2. No publicador, no banco de dados de publicação, execute sp_changemergearticle (Transact-SQL). Especifique um valor de processing_order para @property e um valor inteiro que representa a ordem de processamento para @value.