Como as assinaturas atualizáveis funcionam

As assinaturas atualizáveis para replicação transacional permitem que os Assinantes repliquem alterações para o Publicador. Os gatilhos são adicionados a tabelas publicadas no banco de dados de assinatura, quando uma alteração é feita no Assinante, o gatilho é acionado:

  • Para as assinaturas de atualizações imediatas, a alteração é propagada diretamente no Publicador e aplicada com o uso do Coordenador de Transações Distribuídas da Microsoft(MSDTC).

  • Para as assinaturas de atualizações em fila, a alteração é inicialmente propagada para uma fila e, em seguida, aplicada ao Publicador pelo Queue Reader Agent.

Alterações feitas no Publicador são replicadas para o Assinante da mesma maneira que as publicações transacionais com Assinantes do tipo somente leitura. Para obter mais informações, consulte Como a replicação transacional funciona.

Atualização imediata

As assinaturas de atualizações imediatas usam os seguintes componentes:

  • Rastreamento de colunas para cada tabela publicada

    Quando uma tabela é publicada em uma publicação que permite assinaturas atualizáveis, a coluna msrepl_tran_version é adicionada à tabela. Esta coluna é usada para rastreamento de alterações e detecção de conflitos. Os conflitos em atualização imediata ocorrerão se o Assinante atualizar uma cópia desatualizada dos dados.

  • MSDTC

    Para cada alteração feita no Assinante, o MSDTC gerencia a operação de confirmação em duas fases entre o Publicador e o Assinante que confirma a alteração. Esta abordagem não possui as limitações de disponibilidade do uso da confirmação de duas fases com todos os sites participantes, porque somente o Assinante precisa estar disponível. Após a alteração ser feita no Publicador com o uso da confirmação em duas fases, ela é replicada para outros Assinantes pelo Distribution Agent.

  • Gatilhos nas tabelas no banco de dados de assinatura

    Os gatilhos de inserção, atualização e exclusão são adicionados a cada tabela publicada no banco de dados de assinatura. Os gatilhos são criados com o uso do modificador NOT FOR REPLICATION da instrução CREATE TRIGGER, de modo que as alterações aplicadas pelo Distribution Agent não acionem os gatilhos. Para obter mais informações, consulte Controlando restrições, identidades e gatilhos com NOT FOR REPLICATION.

    Para assinaturas de atualizações imediatas, os gatilhos também gerenciam valores das colunas identidade e carimbo data/hora no Assinante. Valores são gerados no Publicador para estes tipos de colunas e propagados para o Assinante como parte da operação de confirmação em duas fases.

  • Procedimentos armazenados

    Quando você cria uma publicação e a habilita para assinaturas de atualização imediata, os procedimentos inserir, atualizar e excluir são criados para cada tabela publicada no banco de dados de atualização. Quando ocorre uma alteração no Assinante, um gatilho de replicação emite uma chamada de procedimento remoto pelo MSDTC para o procedimento armazenado apropriado no Publicador, que, em seguida, aplica a alteração.

    Os procedimentos armazenados no Publicador aplicarão alterações somente se não entrarem em conflito com as alterações feitas no Publicador, depois do assinante ter recebido por último sua cópia das linhas alteradas. Se um conflito for detectado, a transação será rejeitada e revertida no Publicador e no Assinante.

A ilustração a seguir exibe os principais componentes usados em uma topologia que inclui assinaturas de atualização imediata.

Fluxo de dados e componentes de atualização imediata

  1. Uma alteração feita no Assinante é capturada por um gatilho na tabela de assinaturas.

  2. O gatilho faz a chamada pelo MSDTC no procedimento armazenado apropriado no Publicador.

  3. O procedimento armazenado executa a inserção, atualização ou exclusão a menos que haja um conflito. Se houver um conflito, a alteração será revertida no Publicador e no Assinante.

  4. As alterações feitas no Publicador resultantes das alterações replicadas de um Assinante são propagadas para todos os outros Assinantes de acordo com a programação do Distribution Agent.

Atualização enfileirada

As assinaturas de atualizações em fila usam os seguintes componentes:

  • Rastreamento de colunas para cada tabela publicada

    Quando uma tabela é publicada em uma publicação que permite assinaturas atualizáveis, a coluna msrepl_tran_version é adicionada à tabela. Esta coluna é usada para rastreamento de alterações e detecção de conflitos.

  • Gatilhos nas tabelas do banco de dados de assinatura

    Os gatilhos de inserção, atualização e exclusão são adicionados a cada tabela publicada no banco de dados de assinatura. Os gatilhos são criados com o uso do modificador NOT FOR REPLICATION da instrução CREATE TRIGGER de modo que as alterações aplicadas pelo Distribution Agent não acionem os gatilhos. Para obter mais informações, consulte Controlando restrições, identidades e gatilhos com NOT FOR REPLICATION.

  • Procedimentos armazenados

    Quando você cria uma publicação e a habilita para assinaturas de atualização em fila, os procedimentos inserir, atualizar e excluir são criados para cada tabela publicada no banco de dados de atualização.

    Os procedimentos armazenados são chamados pelo Queue Reader Agent para aplicar transações no Publicador, detectar conflitos e, se necessário, gerar comandos de compensação, os quais são postados no banco de dados de distribuição e, em seguida, distribuídos ao Assinante.

    Um procedimento armazenado para registrar as informações de conflitos no Publicador e, opcionalmente, enviar as informações de conflitos aos Assinantes relevantes, também é criado no Publicador. Isto será invocado pelo Queue Reader Agent se um conflito for detectado.

  • Microsoft SQL Server fila

    Cada banco de dados de assinatura contém a tabela de sistema MSreplication_queue que armazena as alterações do Assinante.

  • SQL Server Queue Reader Agent

    O Queue Reader Agent lê as alterações do MSreplication_queue e as aplica ao Publicador. Para obter mais informações, consulte Replication Queue Reader Agent.

A ilustração a seguir exibe os principais componentes usados em uma topologia que inclui assinaturas de atualização em fila.

Fluxo de dados e componentes de atualização em fila

  1. As atualizações feitas no Assinante são capturadas pelos gatilhos nas tabelas de assinaturas. Os gatilhos armazenam estas atualizações no MSreplication_queue.

  2. O Queue Reader Agent faz a leitura no MSreplication_queue e, em seguida, aplica as transações em fila à publicação apropriada usando os procedimentos armazenados de replicação.

  3. Ao aplicar as transações em fila, os conflitos (se houver) são detectados e solucionados de acordo com uma política de resolução de conflitos estabelecida quando a publicação é criada. Como conseqüência, os comandos de compensação podem ser gerados para reverter uma transação para um Assinante usando o processo de distribuição de replicação transacional padrão (são enviados somente ao Assinante que causou o conflito). Para obter mais informações, consulte Detecção e resolução de conflitos de atualização em fila.

  4. As alterações feitas no Publicador, resultantes das alterações replicadas de um Assinante, são propagadas para todos os outros Assinantes de acordo com a programação do Distribution Agent.