Database
 sql >> Base de Dados >  >> RDS >> Database

Rastreamento em nível de coluna e em nível de linha na replicação de mesclagem


Neste artigo, vamos revisar as opções de rastreamento em nível de linha e coluna na replicação de mesclagem e como elas são usadas na detecção de conflitos durante a replicação de mesclagem.

Mesclar replicação: A replicação de mesclagem é usada para replicar dados de duas maneiras, ou seja, do editor para o assinante e do assinante para o editor.

O instantâneo inicial de objetos é obtido e aplicado aos assinantes. Alterações de dados incrementais e alterações de esquema são rastreadas usando gatilhos e aplicadas aos assinantes quando o assinante sincroniza com o publicador.



Conflitos:

Na replicação de mesclagem, o assinante e o editor são independentes e os dados podem ser modificados em qualquer nó.

Quando os dados são modificados no publicador e no assinante dentro do ciclo de replicação e quando o assinante sincroniza com o publicador, ocorre um conflito. O agente de mesclagem determina o vencedor em ambos os lados, dependendo do resolvedor de conflitos. Por padrão, o vencedor é determinado por diferentes parâmetros, como assinatura de cliente ou servidor, assinatura pull ou push, etc.

Detecção de conflitos:

A detecção de conflito depende do tipo de rastreamento que configuramos para o artigo.
  • Acompanhamento em nível de linha: Se as alterações de dados forem feitas em qualquer coluna na mesma linha em ambas as extremidades, isso será considerado um conflito.
  • Acompanhamento em nível de coluna: Se as alterações de dados forem feitas na mesma coluna em ambas as extremidades, essa alteração será qualificada como um conflito.

Resolvedores:

Os resolvedores aplicam os dados do vencedor em ambas as extremidades quando ocorre um conflito.

Por padrão, se houver um conflito entre o editor e o assinante, o editor sempre vence.

Se ocorrer um conflito entre dois assinantes, o vencedor é determinado pelo assinante cliente/servidor e pelas assinaturas pull/push.

Além do resolvedor padrão, também existem alguns resolvedores personalizados. Discutiremos resolvedores personalizados nos próximos artigos.

Configure a replicação de mesclagem com rastreamento em nível de linha:

Banco de dados do editor:pub_db

Banco de dados do assinante:sub_db

Vamos criar a tabela “TBL_EMP” e adicioná-la à replicação de mesclagem.
CREATE TABLE TBL_EMP
(EmpID INT, Emp_FName varchar(100),Emp_Lname varchar(100))

INSERT INTO TBL_EMP VALUES (1,'Jhon','P')

INSERT INTO TBL_EMP VALUES (2,'Alison','P')

INSERT INTO TBL_EMP VALUES (3,'Angela','P')

Para configurar a replicação de mesclagem, o editor deve ser configurado para usar distribuição local ou distribuição remota.

Depois que a distribuição estiver configurada, navegue até a pasta de replicação no SSMS e clique com o botão direito do mouse em publicações locais.



Clique em Avançar e selecione o banco de dados de publicação, clique em Avançar e selecione a replicação de mesclagem, selecione 2008 ou posterior e adicione a tabela à replicação.



Agora clique nas propriedades do artigo e selecione as propriedades do artigo destacado.



Selecione o nível de rastreamento para ser o rastreamento em nível de linha.



Por padrão, será o rastreamento em nível de linha. Clique em OK, Avançar, Avançar . Adicione um filtro se quiser enviar dados específicos ao assinante, caso contrário, ignore, ative Criar instantâneo imediatamente , configure a segurança do agente de acordo com suas necessidades, ative Criar publicação , especifique o nome da publicação e clique em Concluir .

Depois que o instantâneo inicial for gerado, adicione o assinante.

Navegue até a publicação que você criou na pasta de replicação no editor, clique com o botão direito do mouse e selecione Nova assinatura.

Clique em Avançar , selecione a publicação, clique em Avançar e selecione a assinatura pull ou push conforme suas necessidades. Nesse caso, usei a assinatura push.



Selecione o banco de dados de assinatura e clique em Avançar , configure as credenciais de login para o agente de mesclagem e clique em Avançar .

Escolha a agenda do agente de acordo com suas necessidades. Nesse caso, usei Executar somente sob demanda . Clique em Avançar , selecione Iniciar imediatamente e selecione cliente como o tipo de assinatura, clique em Avançar , ative Criar assinatura , clique em Avançar e Concluir .



Depois que o instantâneo inicial for aplicado, execute a instrução abaixo no editor para atualizar o registro.
update TBL_EMP set Emp_Fname = 'Amanda' where empid = 1

Agora, no banco de dados do assinante, execute a instrução abaixo para atualizar o sobrenome.
update TBL_EMP set Emp_Lname = 'A' where empid = 1

Agora, a mesma linha foi modificada no banco de dados do editor e no banco de dados do assinante no mesmo ciclo de replicação.

De acordo com a opção de rastreamento que definimos, ou seja, rastreamento em nível de linha, a alteração é considerada um conflito e será registrada nas tabelas de conflito quando o agente de mesclagem for executado.

Navegue até a publicação que você criou e expanda a publicação para ver as assinaturas. Clique com o botão direito do mouse na assinatura, selecione Exibir status de sincronização e clique em Iniciar.

Depois que o agente de mesclagem for executado com êxito, vá até o assinante e verifique os dados usando a instrução abaixo.
use sub_db
select * from TBL_EMP  where empid = 1 


Podemos ver que a mudança do editor ganhou e a mudança do assinante perdeu.



As informações de conflito são armazenadas nas tabelas de conflito e podem ser visualizadas no visualizador de conflito.

Navegue até o editor, clique com o botão direito do mouse e selecione Exibir conflitos.



Selecione a tabela de conflitos e clique em OK para visualizar os detalhes.



Alterar o nível de rastreamento

Agora vamos alterar o nível de rastreamento para o rastreamento em nível de coluna. Navegue até a publicação, clique com o botão direito do mouse e selecione Propriedades do editor. Clique em Artigos, selecione a tabela, clique em Propriedades do artigo, defina as propriedades do artigo de tabela realçado, selecione Rastreamento em nível de coluna, clique em OK, clique em OK e clique em Marcar para reinicialização.

Isso marcará todos os assinantes para reinicialização, pois estamos alterando o nível de rastreamento existente para um novo.



Navegue até a publicação, clique com o botão direito do mouse na publicação e clique em Exibir status do agente de instantâneo , clique em Iniciar para gerar um novo instantâneo. Existem outras maneiras de gerar um instantâneo também.

Agora, execute a instrução abaixo no editor para atualizar um registro.
update TBL_EMP set Emp_Fname = 'Amanda' where empid = 2

Agora, execute a instrução abaixo no banco de dados do assinante para atualizar o sobrenome.
update TBL_EMP set Emp_Lname = 'A' where empid = 2

Execute o agente de mesclagem manualmente. Ainda vejo o conflito no registro, embora tenhamos atualizado duas colunas diferentes e definido o nível de rastreamento para o nível da coluna.



Podemos ver os detalhes no visualizador de conflito. Alterar o nível de rastreamento existente não funcionou. Então, reconfigurei a publicação, configurei o nível de rastreamento para o rastreamento em nível de coluna antes de gerar o instantâneo inicial. Um instantâneo foi criado e um assinante foi adicionado à publicação.

Depois que o instantâneo inicial for aplicado ao assinante, execute as instruções a seguir no banco de dados do editor.
update TBL_EMP set Emp_Fname = 'Amanda' where empid = 3


Execute a seguinte instrução no banco de dados do assinante.
update TBL_EMP set Emp_Lname = 'A' where empid = 3

Execute o agente de mesclagem manualmente. Agora, no banco de dados do assinante, consulte a tabela TBL_EMP.



A atualização do editor e do assinante não é qualificada como um conflito, pois ambos estão em colunas diferentes e o nível de rastreamento é definido como o rastreamento em nível de coluna. Nenhum conflito é registrado nas tabelas de conflito, as atualizações no editor e no assinante em colunas diferentes não são perdidas.

Vamos atualizar a mesma coluna no editor e no assinante.

Execute a instrução a seguir no banco de dados do editor.
use pub_db
update TBL_EMP set Emp_Lname = 'B' where empid = 1

Execute a instrução a seguir no banco de dados do assinante.
use sub_db
update TBL_EMP set Emp_Lname = 'C' where empid = 1

Execute o agente de mesclagem e consulte a tabela TBL_EMP no assinante. A atualização no assinante é perdida e o conflito é registrado.





Desempenho:

Pode haver sobrecarga de desempenho com o rastreamento em nível de coluna em comparação com o rastreamento em nível de linha quando há grandes atualizações. Mas, no meu caso, não notei nenhuma diferença nos tempos de sincronização para o rastreamento em nível de linha e em nível de coluna no caso de grandes atualizações, pois a tabela pode ser simples em estrutura (ou seja, muito poucas colunas) e tanto o assinante quanto o publisher estão na mesma instância do SQL Server.

Observações:
  • Por padrão, é sempre o rastreamento em nível de linha quando a replicação de mesclagem é configurada.
  • A opção de nível de rastreamento depende de uma tabela. Assim, você pode ter um nível de linha em uma tabela e um nível de coluna em outra tabela.
  • Essas opções só ajudam quando um conflito é detectado com base em uma atualização, não o resolvendo.
  • Reconfigure a publicação se a alteração do nível de rastreamento existente não funcionar.
  • Defina o nível de rastreamento de acordo com suas necessidades de negócios.