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 tópico explica como especificar várias propriedades para a sua replicação de fusão.
O artigo de fusão é Download-Only
Os artigos apenas para download são concebidos para aplicações cujos dados não são atualizados em Subscritores. Para obter mais informações, consulte Otimizar o desempenho da replicação de mesclagem com Download-Only artigos.
Considerations
- Se especificar que um artigo é apenas para download após as subscrições terem sido inicializadas, todas as subscrições de clientes que receberam o artigo devem ser reiniciadas. As subscrições de servidor não precisam de ser reinicializadas. Para mais informações sobre os efeitos das alterações às propriedades, consulte Alterar as propriedades da publicação e do artigo.
Utilize SQL Server Management Studio
Na página de Artigos
Na página de Artigos do Assistente de Novas Publicações, selecione uma tabela e depois selecione a caixa de seleção. A tabela destacada é apenas para download.
No separador Propriedades do artigo Propriedades
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 e depois clique em Propriedades do Artigo.
Clique em Definir propriedades do artigo de tabela realçado ou Definir propriedades de todos os artigos de tabela.
Na secção Objecto de Destino do separador Propriedades da caixa de diálogo Propriedades do Artigo - <Artigo> , especifique um dos seguintes valores para a direção de Sincronização:
- Transferir para o subscritor, proibir alterações pelo subscritor
- Transferir para o subscritor, permitir alterações do subscritor
Se estiver na caixa de diálogo Propriedades de Publicação - <Publicação> , clique em OK para guardar e fechar a caixa de diálogo.
Utilize o Transact-SQL
Novo artigo
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 - Sem restrições (padrão). As alterações feitas no Subscritor são carregadas para o Publisher.
- 1 - São permitidas alterações no Assinante, mas estas não são enviadas para o Publicador.
- 2 - Não são permitidas alterações ao nível do Assinante.
Note
Se a tabela fonte de um artigo já estiver publicada noutra publicação, o valor de
@subscriber_upload_optionsdeve ser o mesmo para ambos os artigos.
Artigo existente
Para determinar se um artigo é apenas para download, execute sp_helpmergearticle e verifique o valor de upload_options para o artigo no conjunto de resultados.
Se o valor devolvido no passo 1 for 0, execute sp_changemergearticle, especificando um valor de subscriber_upload_options para
@property, um valor de 1 para@force_invalidate_snapshote@force_reinit_subscription, e um valor de 1 ou 2 para@value, que corresponde ao seguinte comportamento:1 - São permitidas alterações no Assinante, mas não são enviadas para o Publicador.
2 - Não são permitidas alterações por parte do Assinante.
Note
Se a tabela fonte de um artigo já estiver publicada noutra publicação, o comportamento apenas de download deve ser o mesmo para ambos os artigos.
Resolução Interativa de Conflitos
A replicação do Microsoft SQL Server disponibiliza um resolvedor interativo, que lhe permite resolver conflitos manualmente durante a sincronização a pedido no Gestor de Sincronização do Microsoft Windows. Depois de a resolução interativa estar ativada, resolva conflitos de forma interativa durante a sincronização, usando o Resolvedor Interativo. 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).
Recommendations
- Se uma sincronização for realizada fora do Windows Synchronization Manager (como uma sincronização agendada ou uma sincronização a pedido no SQL Server Management Studio ou Replication Monitor), os conflitos são resolvidos automaticamente sem intervenção do utilizador, usando a resolução de conflitos padrão especificada para o artigo. Para mais informações, consulte Resolução Interativa de Conflitos.
Utilize SQL Server Management Studio
Permitir a resolução interativa de conflitos para um artigo
- 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. Para mais informações sobre como usar o assistente e aceder à caixa de diálogo, veja Criar uma Publicação e Visualizar e Modificar Propriedades de Publicação.
- Clique em Propriedades do artigo e, em seguida, clique em Definir propriedades do artigo de tabela selecionado ou Definir propriedades de todos os artigos de tabela.
- Na página Propriedades do Artigo - <Artigo> ou Propriedades do Artigo - <Tipo> de Artigo, clique no separador Resolver.
- Selecione Permitir que o Assinante resolva conflitos de forma interativa durante a sincronização a pedido.
- Selecione OK.
- Se estiver na caixa de diálogo Propriedades de Publicação - <Publicação> , clique em OK para guardar e fechar a caixa de diálogo.
Especifique que uma subscrição deve usar resolução interativa de conflitos
- Na caixa de diálogo Subscription Properties - <Subscriber>: <SubscriptionDatabase>, especifique o valor True para a opção Resolver conflitos de forma interativa. Para mais informações sobre como aceder a esta caixa de diálogo, veja Visualizar e Modificar Propriedades de Subscrição Push e Visualizar e Modificar Propriedades de Subscrição Pull.
- Selecione OK.
Utilize o Transact-SQL
Pode especificar programaticamente que um Assinante usará esta interface gráfica para resolver conflitos de artigos quando é criada uma subscrição pull para uma publicação de fusão. Apenas conflitos em artigos que suportem esta opção serão exibidos no Resolvedor Interativo.
Crie uma subscrição de merge pull que utilize o Resolver Interativo
- No Publicador, na base de dados de publicação, execute sp_helpmergearticle especificando
@publication. Note o valor de allow_interactive_resolver para cada artigo no conjunto de resultados para o qual o Resolver Interativo será utilizado.- Se este valor for 1, será utilizado o Resolver Interativo.
- Se este valor for 0, deve primeiro ativar o Resolver Interativo para cada artigo. Para isso, execute sp_changemergearticle, especificando
@publication,@article, o valor allow_interactive_resolver para@propertye o valor true para@value.
- No Subscritor, na base de dados de subscrição, execute sp_addmergepullsubscription. Para mais informações, consulte Criar uma Subscrição Pull.
- No Subscritor, na base de dados de subscrição, execute o sp_addmergepullsubscription_agent, especificando os seguintes parâmetros:
-
@publisher,@publisher_db(a base de dados publicada), 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 Merge Agent. Para mais informações, consulte Criar uma Subscrição Pull.
-
- No Publisher da base de dados de publicações, execute sp_addmergesubscription.
Defina um artigo que suporte o Resolver Interativo
- No Publisher da base de dados de publicações, execute sp_addmergearticle. Especifique o nome da publicação à qual o artigo pertence para
@publication, um nome para o artigo para@article, o objeto de base de dados publicado para@source_object, e um valor de verdadeiro para@allow_interactive_resolver. Para mais informações, consulte Definir um Artigo.
Nível de Rastreio e Resolução de Conflitos para Artigos de Fusão
Este tópico descreve como especificar o nível de rastreamento e resolução de conflitos para artigos de fusão no SQL Server utilizando o SQL Server Management Studio ou Transact-SQL.
Quando uma subscrição de uma publicação de fusão é sincronizada, a replicação verifica conflitos causados por alterações aos mesmos dados feitas tanto no Publisher como no Assinante. Pode especificar se os conflitos são detetados ao nível da linha, onde qualquer alteração na linha é considerada um conflito, ou ao nível da coluna, onde apenas alterações na mesma linha e coluna são consideradas conflito. A resolução de conflitos dos artigos é feita ao nível das linhas. Para mais informações sobre deteção e resolução de conflitos quando são usados registos lógicos, consulte Deteção e Resolução de Conflitos em Registos Lógicos.
Limitações e Restrições
- Se modificar o nível de rastreio após as subscrições terem sido inicializadas, essas subscrições têm de ser reiniciadas. Para mais informações sobre os efeitos das alterações às propriedades, consulte Alterar Propriedades da Publicação e do Artigo.
- Com o controlo ao nível das linhas e das colunas, a resolução de conflitos é sempre efetuada ao nível da linha: a linha vencedora substitui a linha perdedora. A replicação por fusão também permite especificar que os conflitos sejam rastreados e resolvidos ao nível do registo lógico, mas estas opções não estão disponíveis no SQL Server Management Studio. Para informações sobre como definir estas opções a partir de procedimentos armazenados de replicação, veja Definir uma Relação de Registo Lógico Entre Artigos de Tabela de Fusão.
Utilize SQL Server Management Studio
Especifique o rastreamento ao nível de linha ou coluna para a fusão de artigos na aba Propriedades da caixa de diálogo Propriedades do Artigo , que está disponível 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, veja Criar uma Publicação e Visualizar e Modificar Propriedades de Publicação.
Especificar o rastreamento ao nível de linha ou coluna
- 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.
- Clique em Propriedades do artigo e, em seguida, clique em Definir propriedades do artigo de tabela selecionado ou Definir propriedades de todos os artigos de tabela.
- No separador Propriedades da caixa de diálogo Propriedades do artigo <Artigo>, selecione um dos seguintes valores para a propriedade Nível de rastreio: Rastreio ao nível da linha ou Rastreio ao nível da coluna.
- Se estiver na caixa de diálogo Propriedades de Publicação - <Publicação> , clique em OK para guardar e fechar a caixa de diálogo.
Utilize o Transact-SQL
Para especificar opções de rastreio de conflitos para um novo artigo de fusão
No Publicador, na base de dados de publicação, execute sp_addmergearticle e especifique um dos seguintes valores para
@column_tracking:- true - Utilizar o rastreamento a nível de coluna para o artigo.
- false - Usar rastreamento ao nível da linha, que é o padrão.
Alterar opções de monitorização de conflitos para um artigo de fusão
Para determinar as opções de acompanhamento de conflitos para um artigo de fusão, execute sp_helpmergearticle. Note o valor da opção column_tracking no conjunto de resultados do artigo. Um valor de 1 significa que está a ser usado o rastreamento ao nível da coluna, e um valor de 0 significa que o acompanhamento ao nível da linha está a ser utilizado.
No Publisher na base de dados de publicação, execute sp_changemergearticle. Especifique um valor de column_tracking para
@propertye um dos seguintes valores para@value:- true - Utilize o rastreio ao nível da coluna para o artigo.
- false - Usar rastreamento ao nível da linha, que é o padrão.
Especifique o valor 1 para
@force_invalidate_snapshote@force_reinit_subscription.
Gerir eliminações de seguimento
Note
Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.
Por predefinição, a replicação de intercalação sincroniza comandos DELETE entre o Publicador e o Assinante. A replicação por fusão permite-lhe manter as linhas da base de dados de subscrição mesmo quando estas tiverem sido eliminadas da publicação, e vice-versa. Pode especificar programaticamente que os comandos DELETE sejam ignorados ao criar um novo artigo, ou pode ativar esta funcionalidade mais tarde utilizando procedimentos armazenados de replicação.
Importante
Ativar esta funcionalidade resultará em não convergência, o que significa que os dados presentes no Assinante não refletirão com precisão os dados do Publisher. Deve implementar o seu próprio mecanismo para remover manualmente linhas eliminadas.
Especifique que as eliminações sejam ignoradas para um novo artigo de fusão
No Publisher da base de dados de publicação, execute sp_addmergearticle (Transact-SQL). Especifique um valor de falso para @delete_tracking. Para mais informações, consulte Definir um Artigo.
Note
Se a tabela de fontes de um artigo já estiver publicada noutra publicação, o valor de delete_tracking deve ser o mesmo para ambos os artigos.
Especifique que as eliminações sejam ignoradas para um artigo de fusão existente
Para determinar se a compensação de erros está ativada para um artigo, execute sp_helpmergearticle (Transact-SQL) e note o valor de delete_tracking no conjunto de resultados. Se este valor for 0, as operações de eliminação já estão a ser ignoradas.
Se o valor do passo 1 for 1, execute sp_changemergearticle (Transact-SQL) no Publisher na base de dados de publicação. Especifique um valor de
delete_trackingpara@property, e um valor de falso para@value.Note
Se a tabela de fontes de um artigo já estiver publicada noutra publicação, o valor de delete_tracking deve ser o mesmo para ambos os artigos.
Ordem de Processamento
A replicação de fusão permite-lhe especificar a ordem em que os artigos são processados pelo Merge Agent durante o processo de sincronização. Pode atribuir uma ordem a cada artigo de forma programática ao criar um artigo usando procedimentos armazenados de replicação. Os artigos são processados por ordem do valor mais baixo para o mais alto. Se dois artigos tiverem o mesmo valor, são processados em simultâneo.
Como é Determinada a Ordem de Processamento
Durante a sincronização de fusões, os artigos são, por defeito, processados na ordem exigida pelas dependências entre objetos, incluindo as restrições declarativas de integridade referencial (DRI) definidas nas tabelas base. O processamento envolve enumerar as alterações numa tabela e depois aplicar essas alterações. Se não houver DRI presente mas existirem filtros de junção ou registos lógicos entre os artigos da tabela, os artigos são processados pela ordem exigida pelos filtros e registos lógicos. Artigos não relacionados com nenhum outro artigo através de DRI, filtros de junção, registos lógicos ou outras dependências são processados de acordo com a alcunha do artigo na tabela do sistema sysmergearticles (Transact-SQL).
Considere uma publicação que inclui as tabelas SalesOrderHeader e SalesOrderDetail , com uma coluna de chave primária SalesOrderID na tabela SalesOrderHeader e uma correspondente coluna de chave estrangeira SalesOrderID na tabela SalesOrderDetail . Durante a sincronização, a replicação da fusão previne violações de chave estrangeira ao inserir novas linhas no SalesOrderHeader antes de inserir as linhas associadas no SalesOrderDetail. De forma semelhante, as linhas são eliminadas do SalesOrderDetail antes da linha associada ser eliminada do SalesOrderHeader.
No entanto, em algumas aplicações, a integridade referencial é imposta através de gatilhos de base de dados, ou ao nível da aplicação, em vez de através do DRI. Dada 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 pode ter um gatilho de eliminação que garante que não existem linhas associadas em SalesOrderDetail antes de permitir a eliminação. A replicação por fusão não tem em conta os gatilhos ao determinar a ordem de processamento dos artigos porque não consegue determinar qual será o resultado do gatilho até ser disparado. De forma semelhante, a replicação não pode ter em conta restrições definidas ao nível da aplicação.
Quando a integridade referencial é mantida através de gatilhos ou ao nível da aplicação, deve especificar a ordem em que os artigos devem ser processados. No exemplo com triggers, deveria especificar que a tabela SalesOrderHeader deve ser processada antes da tabela SalesOrderDetail, porque a ordenação dos artigos se baseia na ordem de inserção. A replicação de fusão inverte automaticamente a ordem das eliminações. A replicação de fusão não falha sem ordenação de artigos, porque o Merge Agent continua a processar artigos se ocorrer uma violação de restrição; depois tenta novamente quaisquer operações que tenham falhado após outros artigos terem sido processados. Especificar a ordem dos artigos simplesmente evita tentativas e o processamento adicional associado a elas. Se especificar uma ordem incorreta (por exemplo, uma que resulte no processamento de registos detalhados antes dos registos de cabeçalho), a replicação por fusão tentará novamente o processamento até ter sucesso.
Novo artigo
No Publicador, na base de dados de publicação, execute sp_addmergearticle (Transact-SQL). Especifique um valor inteiro que represente a ordem de processamento do artigo para
@processing_order. Para mais informações, consulte Definir um Artigo.Note
Ao criar artigos com ordem definida, deve deixar intervalos entre os valores de ordenação dos artigos. Isto facilita a definição de novos valores no futuro. Por exemplo, se tiver três artigos para os quais precisa de especificar uma ordem de processamento fixa, defina o valor de
@processing_orderpara 10, 20 e 30 em vez de 1, 2 e 3, respetivamente.
Artigo existente
- Para determinar a ordem de processamento de um artigo, execute sp_helpmergearticle (Transact-SQL) e note o valor de processing_order no conjunto de resultados.
- No Publicador, na base de dados de publicação, execute sp_changemergearticle (Transact-SQL). Especifique um valor de processing_order para
@propertye um valor inteiro que represente a ordem de processamento para@value.