Como a replicação de mesclagem inicializa as publicações e assinaturas

A replicação de mesclagem deve inicializar o Publicador e Assinante antes que os dados possam fluir entre eles. Isso fornece informações sobre as etapas que ocorrem durante a inicialização.

Inicializando a publicação

A lista a seguir detalha as etapas de inicialização de uma publicação, a qual ocorre quando você executa cada procedimento armazenado relacionado ou após você concluir o novo Assistente de Publicação. A inicialização posterior ocorre depois que o Snapshot Agent executa pela primeira vez para uma publicação.

  • sp_replicationdboption

    • O banco de dados de publicação é marcado para replicação. O banco de dados não pode ser descartado a menos que replicação seja removida.

    • São adicionadas tabelas do sistema ao banco de dados de publicação (a menos que uma publicação de mesclagem já exista no banco de dados). Para obter uma lista completa de tabelas do sistema, consulte a seção “Tabelas do sistema criadas na publicação” e “Banco de dados de assinatura” neste tópico.

  • sp_addmergepublication

    • São adicionadas entradas para a publicação às tabelas do sistema.
  • sp_addpublication_snapshot

    • Um trabalho de Snapshot Agent é adicionado ao sistema do SQL Server Agent. O nome de trabalho está no formulário <Publicador>-<Bando_de_Dados_de_Publicação>-<Publicação>-<Inteiro>.
  • sp_addmergearticle

    • Cada objeto replicado é marcado para replicação. O objeto não pode ser excluído a menos que o artigo correspondente seja descartado de todas as publicações.

    • São adicionadas entradas para cada artigo às tabelas do sistema.

O restante da inicialização do banco de dados de publicação ocorre durante a execução inicial do Snapshot Agent para uma publicação (o banco de dados de publicação não é reinicializado durante execuções subseqüentes do Snapshot Agent). Se você usar o Assistente de Novas Publicações, o instantâneo inicial será criado por padrão depois que você concluir o assistente. Se você usar procedimentos armazenados, deverá executar o trabalho do agente ou executar o agente diretamente. Para obter mais informações sobre os agentes sendo executados, consulte Como iniciar e parar um Replication Agent (SQL Server Management Studio) e Conceitos dos executáveis do Replication Agent.

A primeira vez que o Snapshot Agent executa para uma publicação:

  • Uma coluna com o nome rowguid é adicionada a cada tabela publicada, a menos que a tabela já possua uma coluna de tipo de dados de identificador exclusivo com a configuração de propriedade ROWGUIDCOL (em cujo caso esta coluna é usada). A coluna rowguid é usada para identificar exclusivamente toda linha em toda tabela publicada. Se a tabela for descartada da publicação, a coluna rowguid será removida; se uma coluna existente foi usada para rastreamento, a coluna não será removida.

  • Os objetos a seguir são criados no banco de dados de publicação para cada tabela publicada (todos os objetos são criados no esquema dbo):

    • Os gatilhos de inserção, atualização e exclusão são adicionados a tabelas publicadas para rastrear alterações. Os gatilhos são nomeados no formulário MSmerge_ins_<GUID>, MSmerge_upd_<GUID> e MSmerge_del_<GUID>. O valor GUID é derivado da entrada para o artigo na tabela do sistema sysmergearticles.

    • Os procedimentos armazenados são criados para controlar as inserções, atualizações e exclusões nas tabelas publicadas e para efetuar um número de outras operações relacionadas a replicações.

    • São criadas exibições para gerenciar inserções, atualizações, exclusões e filtragem.

    • São criadas tabelas de conflitos para armazenar as informações sobre conflitos. As tabelas de conflitos estão associadas ao esquema das tabelas publicadas: cada tabela publicada recebe um script e, em seguida, o script é usado para criar a tabela de conflitos no banco de dados de publicação. Tabelas de conflitos são nomeadas no formulário dbo.MSmerge_conflict_<Publicação>_<Artigo>.

Sempre que o Snapshot Agent é executado, os seguintes tipos de arquivos (com suas extensões de arquivos correspondentes) são criados para cada artigo no banco de dados de publicação:

  • Esquema (.sch)

  • Índices e restrições (.dri)

  • Gatilhos (.trg)

  • Dados de tabela do sistema (.sys)

  • Tabelas de conflitos (.cft)

  • Dados (.bcp)--não criado para publicações com filtros com parâmetros.

    Se a publicação não usar qualquer filtro com parâmetro, o instantâneo conterá os dados das tabelas publicadas em um conjunto de arquivos .bcp. Se as publicações usam filtros com parâmetros (o que é comum em publicações de mesclagem), o instantâneo inicial não conerá nenhum dado. Os dados são fornecidos com o uso de um instantâneo para a partição de um Assinante, a qual é abordada na seção "Inicializando uma assinatura."

Inicializando uma assinatura

Cada assinatura é inicializada quando o Merge Agent da assinatura executa e copia o instantâneo inicial para o banco de dados de assinaturas: Além do esquema e dos dados dos objetos replicados, o instantâneo contém as tabelas do sistema, exibições, gatilhos e procedimentos armazenados que existem no banco de dados de publicação (uma ou duas tabelas adicionais de sistema também são copiadas para o banco de dados de assinatura). Para obter uma lista completa de tabelas do sistema, consulte a seção “Tabelas do sistema criadas na publicação” e “Banco de dados de assinatura” neste tópico. Se uma assinatura for reinicializada, todos os objetos replicados e os objetos de sistema de replicação serão sobrescritos.

Se nenhuma das tabelas do banco de dados de publicação usar filtros com parâmetros, o instantâneo da mesma publicação será copiado para cada Assinante. Se um ou mais filtros com parâmetros forem usados, a maneira na qual cada assinatura for inicializada será conduzida pela seguinte lógica:

  • Se o local do instantâneo for fornecido ao Merge Agent na linha de comando:

    • Aplique o instantâneo deste local.
  • Ou ainda se o instantâneo foi gerado anteriormente:

    • Recupere o local do instantâneo de MSmerge_dynamic_snapshots no banco de dados de publicação e aplique o instantâneo daquele local.
  • Ou ainda se a publicação permitir que Assinantes iniciem instantâneos:

    • Se um instantâneo já foi gerado para outro Assinante com a mesma partição, aplique esse instantâneo no Assinante.

    • Ou gere e aplique um instantâneo ao Assinante.

  • Além disso, inicialize o Assinante usando as instruções SELECT relacionadas às tabelas na publicação. Esta abordagem é muito mais lenta do que o uso de um instantâneo para a partição do Assinante.

Se uma transferência de instantâneo for interrompida, ela continuará automaticamente de onde parou e não reenviará nenhum arquivo que já tenha sido transferido completamente. A unidade de distribuição do Snapshot Agent é o arquivo bcp para cada artigo de publicação, portanto os arquivos que são parcialmente entregues deverão ser redistribuídos por completo. Entretanto, continuar o instantâneo de onde parou pode reduzir significantemente a quantia de dados transmitidos e assegurar uma entrega de instantâneo a tempo, mesmo se a conexão não for confiável. Para obter mais informações sobre criação de instantâneos, consulte Instantâneos para publicações de mesclagem com filtros com parâmetros.

Local do instantâneo

O local do instantâneo depende: do caminho especificado pelo padrão ou local de instantâneo alternado; caso a publicação utilize um caminho UNC ou compartilhamento FTP para a pasta de instantâneo; e caso a publicação use filtros com parâmetros. Nestes exemplos, supõe-se que o local da pasta de instantâneo é: \\<Meu_Computador>\<Minha_Pasta>\:

  • Se a publicação usar UNC, a primeira parte do caminho será: \\<Meu_Computador>\<Minha_Pasta>\unc\. Se usar o FTP, será: \\<Meu_Computador>\<Minha_Pasta>\ftp\.

  • Se a publicação usa UNC e não usa filtros com parâmetros, o caminho será: \\<Meu_Computador>\<Minha_Pasta>\unc\<Publicador><Publicação_db><publicação>

  • Se a publicação usa UNC e filtros com parâmetros, o local será baseado no caminho da pasta de instantâneo e nos critérios de filtragem da linha com parâmetros para a publicação. Por exemplo, se um artigo for filtrado com o uso da função HOST_NAME() e o valor de HOST_NAME() para a partição for 'Laptop_Vendas', o caminho para o instantâneo dessa partição será: \\<Meu_Computador>\<Minha_Pasta>\unc\<Publicador><Publicação_db><publicaçãon>\ Laptop_Vendas_12\, onde 12 é o ID usado internamente para a partição.

Tabelas do sistema criadas nos bancos de dados de assinatura e publicação.

As tabelas a seguir foram criadas no banco de dados de publicação e em cada banco de dados de assinatura.

Tabela

Descrição

MSdynamicsnapshotjobs (Transact-SQL)

Contém informações sobre trabalhos do instantâneo para as publicações com filtros com parâmetros.

MSdynamicsnapshotviews (Transact-SQL)

Rastreia todas as exibições temporárias de instantâneo criadas pelo Snapshot Agent. É usada pelo sistema para limpeza de exibições no caso de um desligamento incomum do AgenteSQL Server ou do Snapshot Agent.

MSmerge_altsyncpartners (Transact-SQL)

Rastreia a associação de quem são os parceiros atuais de sincronização para um Publicador.

MSmerge_articlehistory (Transact-SQL)

Rastreia alterações feitas nos artigos durante uma sessão de sincronização do Merge Agent, com uma linha para cada artigo no qual a alteração foi feita.

MSmerge_conflicts_info (Transact-SQL)

Rastreia conflitos que ocorrem ao sincronizar uma assinatura para uma publicação de mesclagem.

MSmerge_contents (Transact-SQL)

Contém uma linha para cada linha modificada no banco de dados atual desde que foi publicado. Essa tabela é usada pelo processo de mesclagem para determinar as linhas que foram alteradas.

MSmerge_current_partition_mappings

Contém uma linha para cada partição à qual uma determinada linha alterada pertence.

MSmerge_dynamic_snapshots (Transact-SQL)

Rastreia o local do instantâneo para cada partição definida para uma publicação de mesclagem.

MSmerge_errorlineage (Transact-SQL)

Contém linhas que foram excluídas no Assinante, mas cuja exclusão não é propagada ao Publicador.

MSmerge_generation_partition_mappings (Transact-SQL)

Rastreia se uma determinada geração contém qualquer alteração relacionada a uma determinada partição.

MSmerge_genhistory (Transact-SQL)

Contém uma linha para cada geração. Uma geração é uma coleção de alterações entregues a um Publicador ou Assinante. As gerações são fechadas sempre que o Merge Agent for executado; as alterações subseqüentes de um banco de dados são adicionadas a uma ou mais gerações abertas.

MSmerge_history (Transact-SQL)

Contém linhas de histórico com descrições detalhadas dos resultados de sessões de trabalho anteriores do Merge Agent .

MSmerge_identity_range (Transact-SQL)

Rastreia os intervalos numéricos atribuídos a colunas de identidade para assinaturas em publicações nas quais a replicação gerencia automaticamente essas atribuições de intervalo.

MSmerge_metadataaction_request (Transact-SQL)

Contém uma linha para cada ação de compensação que é requerida. Uma ação de compensação é usada para reverter uma alteração em um nó se a alteração falhou em outro nó.

MSmerge_partition_groups (Transact-SQL)

Contém uma linha para cada partição pré-computada em um determinado banco de dados.

MSmerge_past_partition_mappings (Transact-SQL)

Contém uma linha para cada partição à qual uma determinada linha alterada pertencia, mas que já não pertence mais.

MSmerge_replinfo (Transact-SQL)

Contém uma linha para cada assinatura. Esta tabela rastreia as informações internas sobre gerações enviadas e recebidas.

MSmerge_sessions (Transact-SQL)

Contém linhas de histórico com os resultados de sessões de trabalho anteriores do Merge Agent.

MSmerge_settingshistory (Transact-SQL)

Contém um histórico de alterações feitas no artigo e em propriedades de publicação, com uma linha para cada alteração feita.

MSmerge_tombstone (Transact-SQL)

Contém informações sobre linhas excluídas e permite que exclusões sejam propagadas a outros Assinantes.

MSrepl_errors (Transact-SQL)

Contém informações detalhadas sobre qualquer falha de agente.

sysmergearticles (Transact-SQL)

Contém uma linha para cada artigo de mesclagem.

sysmergepartitioninfo (Transact-SQL)

Contém informações sobre partições de cada artigo, com uma linha para cada artigo.

sysmergepartitioninfoview (Transact-SQL)

Contém informações sobre particionamento para os artigos de tabela.

sysmergepublications (Transact-SQL)

Contém uma linha para cada publicação de mesclagem.

sysmergeschemaarticles (Transact-SQL)

Rastreia artigos somente para esquema, como os procedimentos armazenados.

sysmergeschemachange (Transact-SQL)

Contém informações sobre os artigos publicados gerados pelo Snapshot Agent.

sysmergesubscriptions (Transact-SQL)

Contém uma linha para cada Assinante.

sysmergesubsetfilters (Transact-SQL)

Contém informações de filtro de junção para artigos particionados.

Além disso, a tabela MSsnapshotdeliveryprogress é criada em cada banco de dados de assinatura, e a tabela MSsubscription_properties é criada em cada banco de dados de assinatura que usa uma assinatura pull:

Tabela

Descrição

MSsnapshotdeliveryprogress (Transact-SQL)

Rastreia arquivos que foram distribuídos com êxito ao Assinante quando um instantâneo estiver sendo aplicado. Esses dados são usados para retomar a entrega de arquivos quando o Merge Agent falha em distribuir todos os arquivos durante a sessão.

MSsubscription_properties (Transact-SQL)

Contém as informações de parâmetros exigidas para executar os agentes de replicação para o Assinante