Compartilhar via


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

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

Inicializar a publicação

A lista a seguir detalha as etapas de inicialização de uma publicação, que ocorrem à medida que você executa cada procedimento armazenado listado ou após concluir o Assistente de Nova Publicação. A inicialização adicional ocorre após a execução do Snapshot Agent pela primeira vez para uma publicação.

  • sp_replicationdboption

    • O banco de dados de publicação está marcado para replicação. O banco de dados não pode ser removido, a menos que a replicação seja removida.

    • As tabelas do sistema são adicionadas 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 das tabelas do sistema, consulte a seção "Tabelas do sistema criadas nos bancos de dados de publicação e assinatura" neste artigo.

  • sp_addmergepublication

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

    • Uma tarefa do Snapshot Agent é adicionada ao sistema do SQL Server Agent. O nome do trabalho está no formulário <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle

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

    • As entradas de cada artigo são adicionadas às tabelas do sistema.

O restante da inicialização para o 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 as execuções subsequentes do Agente de Instantâneo. Se você usar o Assistente de Nova Publicação, 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 a execução de agentes, consulte Conceitos de Inicialização e Interrupção de um Agente de Replicação (SQL Server Management Studio) e Executáveis do Replication Agent.

A primeira vez que o Agente de Instantâneo de uma publicação é executado:

  • Uma coluna nomeada rowguid é adicionada a cada tabela publicada, a menos que a tabela já tenha uma coluna do tipo de dados uniqueidentifier com a propriedade ROWGUIDCOL configurada (nesse caso, essa coluna é utilizada). A rowguid coluna é usada para identificar exclusivamente cada linha em cada tabela publicada. Se a tabela for removida da publicação, a rowguid coluna será removida; se uma coluna existente tiver sido usada para acompanhamento, a coluna não será removida.

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

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

    • Os procedimentos armazenados são criados para lidar com inserções, atualizações e exclusões em tabelas publicadas e para executar várias outras operações relacionadas à replicação.

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

    • Tabelas de conflito são criadas para armazenar informações de conflito. As tabelas de conflito correspondem ao esquema das tabelas publicadas: cada tabela publicada tem script e, em seguida, o script é usado para criar a tabela de conflitos no banco de dados de publicação. As tabelas de conflito são nomeadas na forma dbo.MSmerge_conflict_<Publication>_<Article>.

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

  • Esquema (.sch)

  • Restrições e índices (.dri)

  • Gatilhos (.trg)

  • Dados da tabela do sistema (.sys)

  • Tabelas de conflito (.cft)

  • Dados (.bcp): não criados para publicações com filtros parametrizados.

    Se a publicação não usar filtros parametrizados, o instantâneo conterá os dados das tabelas publicadas em um conjunto de .bcp arquivos. Se a publicação usar filtros parametrizados (o que é típico para publicações de mesclagem), o instantâneo inicial não conterá nenhum dado. Os dados são fornecidos por meio de um instantâneo para a partição de um assinante, discutida na seção seguinte.

Inicializar uma assinatura

Cada assinatura é inicializada quando o Agente de Mesclagem da assinatura é executado e copia o instantâneo inicial para o banco de dados de assinatura. Além do esquema e dos dados de 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 do 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 nos bancos de dados de publicação e assinatura neste artigo. Se uma assinatura for reinicializada, todos os objetos replicados e os objetos do sistema de replicação serão substituídos.

Se nenhuma das tabelas no banco de dados de publicação usarem filtros parametrizados, o mesmo instantâneo de publicação será copiado para cada Assinante. Se um ou mais filtros parametrizados forem usados, a maneira como cada assinatura é inicializada é regida pela seguinte lógica:

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

    • Aplique a imagem desta localização.
  • Caso contrário, se o instantâneo tiver sido previamente gerado:

    • Recupere a localização do instantâneo em MSmerge_dynamic_snapshots no banco de dados de publicação e aplique o instantâneo dessa localização.
  • Caso contrário, se a publicação permitir que os Assinantes iniciem instantâneos:

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

    • Caso contrário, gere e aplique um instantâneo ao Assinante.

  • Caso contrário, inicialize o Assinante usando instruções SELECT para as tabelas da publicação. Essa abordagem é mais lenta do que o uso de um instantâneo para a partição do Assinante.

Se a transferência de instantâneo for interrompida a qualquer momento, ela será retomada automaticamente e não reenviará os arquivos que já foram completamente transferidos. A unidade de entrega para o Agente de Instantâneo é o arquivo bcp para cada artigo de publicação, então, os arquivos que são parcialmente entregues deverão ser reenviados completamente. 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 como criar instantâneos, consulte Filtros parametrizados – filtros de linha parametrizados.

Local do Instantâneo

O local do instantâneo depende de: o caminho especificado para o local de instantâneo padrão ou alternativo; se a publicação usa um caminho UNC ou compartilhamento FTP para a pasta de instantâneo; e se a publicação usa filtros parametrizados. Nestes exemplos, suponha que o local da pasta de instantâneo seja: \\<MyComputer>\<MyFolder>

  • Se a publicação usar UNC, a primeira parte do caminho será: \\<MyComputer>\<MyFolder>\unc\. Se ele usa FTP, é \\<MyComputer>\<MyFolder>\ftp\.

  • Se a publicação usar UNC e não usar filtros parametrizados, o caminho será\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • Se a publicação fizer uso de UNC e empregar filtros parametrizados, o local será determinado pelo caminho da pasta de instantâneos e pelos critérios de filtragem de linha parametrizados específicos da publicação. Por exemplo, se o artigo for filtrado usando a função HOST_NAME() e o valor de HOST_NAME() para a partição for SalesLaptop, o caminho para o instantâneo dessa partição será \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, em que 12 é a ID usada internamente para a partição.

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

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

Tabela Descrição
MSdynamicsnapshotjobs Contém informações sobre tarefas de captura instantânea para publicações com filtros parametrizados.
MSdynamicsnapshotviews Acompanha todas as exibições temporárias do instantâneo criadas pelo Agente de Instantâneo. Ele é usado pelo sistema para limpar exibições no caso de um desligamento anormal do SQL Server Agent ou do Snapshot Agent.
MSmerge_altsyncpartners Acompanha a associação de quem são os parceiros de sincronização atuais de um Editor.
MSmerge_articlehistory Controla as alterações feitas em artigos durante uma sessão de sincronização do Merge Agent, com uma linha para cada artigo no qual foram feitas alterações.
MSmerge_conflicts_info Acompanha conflitos que ocorrem ao sincronizar uma assinatura com uma publicação de mesclagem.
MSmerge_contents Contém uma linha para cada linha modificada no banco de dados atual desde que foi publicada. 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 Acompanha o local do instantâneo de cada partição definida para uma publicação de mesclagem.
MSmerge_errorlineage Contém linhas que foram excluídas no Assinante, mas cuja exclusão não é propagada para o Editor.
MSmerge_generation_partition_mappings Controla se uma determinada geração contém alterações relevantes para uma determinada partição.
MSmerge_genhistory Contém uma linha para cada geração. Uma geração é um conjunto de alterações que é entregue para um Publicador ou Assinante. As gerações são fechadas sempre que o Merge Agent é executado; alterações subsequentes em um banco de dados são adicionadas a uma ou mais gerações abertas.
MSmerge_history Contém linhas de histórico com descrições detalhadas dos resultados das sessões de trabalho anteriores do Merge Agent.
MSmerge_identity_range Acompanha os intervalos numéricos atribuídos às colunas de identidade para assinaturas em publicações para as quais a replicação está gerenciando automaticamente as atribuições de intervalo.
MSmerge_metadataaction_request Contém uma linha para cada ação de compensação necessária. Uma ação de compensação é usada para reverter uma alteração em um nó se a alteração falhar em outro nó.
MSmerge_partition_groups Contém uma linha para cada partição pré-computada em um determinado banco de dados.
MSmerge_past_partition_mappings Contém uma linha para cada partição à qual uma determinada linha alterada costumava pertencer, mas não pertence mais.
MSmerge_replinfo Contém uma linha para cada assinatura. Esta tabela acompanha as informações internas sobre as gerações enviadas e recebidas.
MSmerge_sessions Contém linhas de histórico com os resultados das sessões de trabalho anteriores do Agente de Mesclagem.
MSmerge_settingshistory Contém um histórico de alterações feitas nas propriedades de artigo e publicação, com uma linha para cada alteração feita.
MSmerge_tombstone Contém informações sobre linhas excluídas e permite que as exclusões sejam propagadas para outros Assinantes.
MSrepl_errors Contém informações detalhadas sobre quaisquer falhas de agente.
sysmergearticles Contém uma linha para cada artigo de mesclagem.
sysmergepartitioninfo Contém informações sobre partições para cada artigo, com uma linha para cada artigo.
sysmergepartitioninfoview Contém informações de particionamento para artigos da tabela.
sysmergepublications Contém uma linha para cada publicação de mesclagem.
sysmergeschemaarticles Rastreia artigos que são apenas de esquema, como procedimentos armazenados.
sysmergeschemachange Contém informações sobre os artigos publicados gerados pelo Snapshot Agent.
sysmergesubscriptions Contém uma linha para cada Assinante.
sysmergesubsetfilters Contém informações de filtro de junção para artigos particionados.

Além disso, a MSsnapshotdeliveryprogress tabela é criada em cada banco de dados de assinatura e a MSsubscription_properties tabela é criada em cada banco de dados de assinatura que usa uma assinatura por solicitação:

Tabela Descrição
MSsnapshotdeliveryprogress Acompanha arquivos que foram entregues com êxito ao Assinante quando um instantâneo está sendo aplicado. Esses dados são usados para retomar a entrega de arquivos caso o Merge Agent não entregue todos os arquivos durante a sessão.
MSsubscription_properties Contém as informações de parâmetro necessárias para executar agentes de replicação no Assinante