Partilhar via


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

A replicação de mesclagem deve inicializar tanto o Editor quanto o Subscritor 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 depois de concluir o Assistente para Nova Publicação. A inicialização adicional ocorre depois que o Snapshot Agent é executado 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 descartado 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 já exista uma publicação de mesclagem 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

    • Um trabalho do Snapshot Agent é adicionado ao sistema do SQL Server Agent. O nome do trabalho está no formato <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 retirado de todas as publicações.

    • As entradas para cada artigo são adicionadas à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 as execuções subsequentes do Snapshot Agent. Se você usar o Assistente para 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 como executar agentes, consulte Iniciar e parar um agente de replicação (SQL Server Management Studio) e Conceitos de executáveis do Replication Agent.

A primeira vez que o Snapshot Agent 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 definida (caso em que essa coluna será utilizada). A rowguid coluna é usada para identificar exclusivamente cada linha em cada tabela publicada. Se a tabela for retirada da publicação, a rowguid coluna será removida, se uma coluna existente tiver sido usada para rastreamento, 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 dbo objetos são criados no esquema):

    • Inserir gatilhos, atualizar gatilhos e excluir gatilhos são adicionados às 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 para o artigo na tabela sysmergearticlesdo sistema.

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

    • Os modos de exibição são criados para gerenciar inserções, atualizações, exclusões e filtragem.

    • As 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 é roteirizada e, em seguida, o script é usado para criar a tabela de conflito 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 conflitos (.cft)

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

    Se a publicação não usar nenhum filtro parametrizado, 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á dados. Os dados são fornecidos por meio de um instantâneo da partição do assinante, conforme discutido na próxima seção.

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 da 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 de sistema extras 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 subscrição for reinicializada, todos os objetos replicados e os objetos do sistema de replicação são substituídos.

Se nenhuma das tabelas na base de dados de publicação usar filtros parametrizados, o mesmo instantâneo de publicação será copiado para cada Subscritor. 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 Merge Agent na linha de comando:

    • Aplique o instantâneo deste local.
  • Senão se o instantâneo foi pré-gerado:

    • Recupere o local do instantâneo no banco de dados de publicação MSmerge_dynamic_snapshots e aplique o instantâneo desse local.
  • Se a publicação permitir que os assinantes iniciem instantâneos, então:

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

    • Senão gere e aplique um instantâneo ao Assinante.

  • Caso contrário, inicialize o Assinante usando SELECT instruções em relação às tabelas na publicação. Esta abordagem é mais lenta do que usar um instantâneo para a partição do Subscritor.

Se a transferência de instantâneo for interrompida a qualquer momento, ela será retomada automaticamente e não reenviará nenhum arquivo que já tenha sido completamente transferido. A unidade de entrega para o Snapshot Agent é o arquivo bcp para cada artigo de publicação, portanto, os arquivos parcialmente entregues devem ser completamente reentregues. No entanto, retomar o snapshot pode reduzir significativamente a quantidade de dados transmitidos e garantir a entrega oportuna do snapshot, mesmo que a conexão não seja confiável. Para obter mais informações sobre como criar instantâneos, consulte Filtros parametrizados - Filtros de linha parametrizados.

Localização do instantâneo

O local do snapshot depende: do caminho especificado para o local de snapshot 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 utiliza filtros parametrizados. Nestes exemplos, suponha que o local da pasta de instantâneo seja: \\<MyComputer>\<MyFolder>

  • Se a publicação usa UNC, a primeira parte do caminho é: \\<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 usa UNC e filtros parametrizados, o local é baseado no caminho da pasta de instantâneo e nos critérios de filtragem de linhas parametrizadas para a publicação. Por exemplo, se o artigo é filtrado usando a HOST_NAME() função e o valor de HOST_NAME() para a partição é SalesLaptop, o caminho para o instantâneo para essa partição é \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_12, onde 12 é o ID usado internamente para a partição.

Tabelas de sistema criadas nas bases de dados de publicação e subscrição

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 trabalhos de snapshot para publicações com filtros parametrizados.
MSdynamicsnapshotviews Rastreia todas as visualizações de snapshot temporárias criadas pelo Snapshot Agent. Ele é usado pelo sistema para limpar exibições no caso de um desligamento anormal do SQL Server Agent ou do Snapshot Agent.
MSmerge_altsyncpartners Rastreia a associação de quem são os parceiros de sincronização atuais para 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 as alterações foram feitas.
MSmerge_conflicts_info Monitoriza conflitos que ocorrem ao sincronizar uma assinatura de uma publicação de fusão.
MSmerge_contents Contém uma linha para cada linha modificada no banco de dados atual desde que foi publicada. Esta 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 pertence uma determinada linha alterada.
MSmerge_dynamic_snapshots Rastreia a localização do instantâneo de cada partição definida para uma publicação de mesclagem.
MSmerge_errorlineage Contém linhas que foram eliminadas no Assinante, mas cuja eliminação não é propagada para o Publicador.
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 a um Publicador ou Assinante. As gerações são fechadas cada vez que o Merge Agent é executado; As 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 de sessões de trabalho anteriores do Merge Agent.
MSmerge_identity_range Acompanha os intervalos numéricos atribuídos às colunas de identidade para assinaturas de publicações nas quais a replicação está a gerir automaticamente as atribuições de intervalos.
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é-calculada em um determinado banco de dados.
MSmerge_past_partition_mappings Contém uma linha para cada partição a que uma determinada linha alterada costumava pertencer, mas não pertence mais.
MSmerge_replinfo Contém uma linha para cada assinatura. Esta tabela rastreia informações internas sobre gerações enviadas e recebidas.
MSmerge_sessions Contém linhas de histórico com os resultados de sessões de trabalho anteriores do Merge Agent.
MSmerge_settingshistory Contém um histórico de alterações feitas nas propriedades do artigo e da publicação, com uma linha para cada alteração feita.
MSmerge_tombstone Contém informações sobre linhas excluídas e permite que 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 de tabela.
sysmergepublications Contém uma linha para cada publicação de fusão.
sysmergeschemaarticles Rastreia artigos somente 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 pull:

Tabela Descrição
ProgressoDeEntregaDeSnapshotMS Rastreia arquivos que foram entregues com êxito ao Assinante quando um instantâneo (snapshot) está a ser aplicado. Esses dados são usados para retomar a entrega de arquivos caso o Merge Agent não consiga entregar todos os arquivos durante a sessão.
MSsubscription_properties Contém as informações de parâmetros necessárias para executar agentes de replicação no Assinante