Como configurar a replicação transacional ponto a ponto (Programação Transact-SQL de replicação)

Este tópico descreve como configurar e manter uma topologia de replicação ponto a ponto usando procedimentos armazenados. O tópico mostra primeiro como criar uma topologia de três nós e, em seguida, descreve como adicionar e conectar um novo nó. Procedimentos separados são mostrados para a adição de um nó que está executando o SQL Server 2005 e a adição de um nó que está executando o SQL Server 2008 ou versão posterior do SQL Server. Este tópico não inclui informações sobre os parâmetros usados para detectar conflitos em replicação ponto a ponto. Para obter mais informações sobre a detecção de conflitos, consulte Como configurar a detecção de conflitos para replicação transacional ponto a ponto (Programação Transact-SQL de replicação).

A configuração da topologia é bem semelhante à configuração de uma série de publicações transacionais e assinaturas padrão. O ponto principal a observar é como os nós são inicializados e os valores que são especificados para o parâmetro @sync_type do sp_addsubscription:

  • O primeiro nó em uma topologia contém o banco de dados de publicação original, portanto, não deve ser inicializado com esquema e dados. Portanto, você especifica um valor de suporte para replicação somente para assinaturas que replicam dados de outros nós para o primeiro nó. Essa opção garante que os objetos exigidos pela replicação sejam copiados para o primeiro nó.

  • Após o primeiro nó ser configurado, os nós são inicializados, tipicamente, de um backup do primeiro nó. Portanto, você especifica um valor de inicializar com backup ou de suporte para replicação somentepara assinaturas que replicam dados do primeiro nó para os demais nós. Um valor de suporte para replicação somente pode ser usado se nenhuma atividade estiver ocorrendo no sistema, mas um valor de inicializar com backup é necessário se o sistema estiver ativo. Especificando inicializar com backup garante que todas as transações pertinentes sejam replicadas em um novo nó.

  • Após o nó ter sido inicializado, as assinaturas que replicam dados de outros nós não devem inicializar novamente o nó. Portanto, você especifica um valor de suporte para replicação somente ou inicializar do lsn. Um valor de suporte para replicação somente pode ser usado se nenhuma atividade estiver ocorrendo no sistema, mas o valor inicializar do lsn será necessário se o sistema estiver ativo. Especificando inicializar do lsn garante que todas as transações pertinentes sejam replicadas em um novo nó.

    A SQL Server 2005 não tem suporte para inicializar do lsn. Se uma topologia inclui nós SQL Server 2005, você pode conectar um novo nó a um nó existente, mas você precisa confirmar o sistema para conectar a mais de um nó. Confirmar um sistema envolve parar as atividades nas tabelas publicadas em todos os nós e garantir que cada nó tenha recebido todas as alterações de todos os demais nós. Esse processo é descrito em detalhes na última seção deste tópico.

Procedimento

Se estiver configurando uma topologia para bancos de dados ativos, use o procedimento a seguir para adicionar o primeiro e o segundo nó (nó A e nó B). Em seguida, use o procedimento subseqüente para o nó C e nós adicionais. O procedimento subseqüente usa um valor @sync_type de inicializar do lsn. Essa opção permite configurar uma topologia enquanto o sistema estiver ativo sem perder nenhuma transação.

Para definir a replicação ponto a ponto entre três nós

  1. Configure cada nó como um Publicador e associe-o a um Distribuidor local ou remoto. Se usar um Distribuidor remoto, recomendamos que não use o mesmo Distribuidor remoto para todos os nós, porque isto é potencialmente um único ponto de falha. Para obter mais informações, consulte Como configurar publicação e distribuição (Programação Transact-SQL de replicação).

  2. No nó A, execute o sp_addpublication. Especifique um valor de true para @enabled_for_p2p, um valor de ativo para @status e um valor de true para @allow_initialize_from_backup. Para adicionar artigos à publicação, execute o sp_addarticle.

  3. Os dados iniciais devem estar presentes em cada nó antes de a topologia ser configurada. Use o backup do SQL Server e restaure a funcionalidade para inicializar dados para a publicação a cada nó na topologia. O backup deve vir do primeiro nó configurado, neste caso o nó A. O backup deve ser efetuado após a publicação no nó A ter sido criada e habilitada para replicação ponto a ponto. Este tópico pressupõe que não ocorre uma atividade em nenhum dos novos nós antes que todos os nós sejam adicionados; portanto, você pode usar o mesmo backup para inicializar cada nó.

    Se houver uma atividade em qualquer um dos novos nós antes que todos os nós sejam adicionados, você deve efetuar um novo backup após cada nó ter sido adicionado e sincronizado pelo menos uma vez com o nó A. Isto fará com que o backup do nó A tenha metadados a respeito de todos os demais nós. Por exemplo, se você adicionar o nó B e o nó C com atividades nesses nós: inicialize o nó B com um backup do nó A; configure e sincronize o nó B; efetue um novo backup do nó A; inicialize o nó C com o novo backup; e configure e sincronize o nó C.

    Para obter mais informações sobre como efetuar backup e restaurar bancos de dados, consulte Fazendo backup e restaurando bancos de dados no SQL Server.

    Observação importanteImportante

    Quando estiver restaurando o banco de dados, não especifique a opção KEEP_REPLICATION (para Transact-SQL) ou a opção Preservar as configurações de replicação (para SQL Server Management Studio). A replicação configurará o banco de dados adequadamente quando você for executar o Assistente de Configuração da Topologia Ponto a Ponto.

    Um backup contém todo o banco de dados, portanto, cada banco de dados do mesmo nível contém uma cópia completa do banco de dados de publicação quando este for inicializado. Os backups podem conter tabelas que não são especificadas como artigos para a publicação. É da responsabilidade do administrador ou aplicativo remover quaisquer objetos ou dados não desejados depois que o backup tiver sido restaurado. Em sincronizações subseqüentes, as alterações em dados só serão replicadas se elas se aplicarem às tabelas que são especificadas como artigos.

  4. No nó A, execute o sp_addsubscription. Especifique o nome da publicação criada no nó A como @publication, o nome do nó B como @subscriber, o nome do banco de dado de destino no nó B como @destination_db, um valor de inicializar com backup para @sync_type, e valores apropriados para os parâmetros @backupdevicetype e @backupdevicename.

  5. No nó A, execute novamente o sp_addsubscription. Desta vez, especifique o nome da publicação como @publication, o nome do nó C como @subscriber, o nome do banco de dado de destino no nó C como @destination_db, um valor de inicializar com backup para @sync_type, e valores apropriados para os parâmetros @backupdevicetype e @backupdevicename.

  6. No nó B, execute o sp_addpublication. Especifique o nome da publicação como @publication, um valor de true para @enabled_for_p2p, um valor de ativo para @status e um valor de true para @allow_initialize_from_backup. Para adicionar artigos à publicação, execute o sp_addarticle.

  7. No nó B, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó A como @subscriber, o nome do banco de dados de destino no nó A como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  8. No nó B, execute novamente o sp_addsubscription. Desta vez, especifique o nome da publicação como @publication, o nome do nó C como @subscriber, o nome do banco de dados de destino no nó C como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  9. No nó C, execute o sp_addpublication. Especifique o nome da publicação como @publication, um valor de true para @enabled_for_p2p, um valor de ativo para @status e um valor de true para @allow_initialize_from_backup. Para adicionar artigos à publicação, execute o sp_addarticle.

  10. No nó C, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó A como @subscriber, o nome do banco de dados de destino no nó A como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  11. No nó C, execute novamente o sp_addsubscription. Desta vez, especifique o nome da publicação como @publication, o nome do nó B como @subscriber, o nome do banco de dados de destino no nó B como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  12. Se tiver qualquer coluna de identidade nas tabelas publicadas, após a operação de restauração, o intervalo de identidade que você atribuiu às tabelas no nó A será usado também nas tabelas do nó B e nó C. Você deve usar o DBCC CHECKIDENT para propagar as tabelas no nó B e nó C para garantir que um intervalo diferente esteja em uso para cada uma.

    Para obter mais informações sobre como administrar os intervalos de identidade, consulte a seção "Atribuindo intervalos para administração manual do intervalo de identidade" de Replicando colunas de identidades.

Use o procedimento a seguir para adicionar um ou mais nós a uma topologia composta por nós em execução no SQL Server 2008 ou versões posteriores do SQL Server.

Para adicionar um nó executando o SQL Server 2008 ou versão posterior à topologia

  1. Configure o nó D como um Publicador e associe-o a um Distribuidor local ou remoto.

  2. Restaure um backup do nó A para o nó D.

  3. No nó D, execute o sp_addpublication. Especifique o nome da publicação como @publication, um valor de true para @enabled_for_p2p, um valor de ativo para @status e um valor de true para @allow_initialize_from_backup. Para adicionar artigos à publicação, execute o sp_addarticle.

  4. No nó D, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó A como @subscriber, o nome do banco de dados de destino no nó A como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  5. No nó A, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó D como @subscriber, o nome do banco de dado de destino no nó D como @destination_db, um valor de inicializar com backup para @sync_type, e valores apropriados para os parâmetros @backupdevicetype e @backupdevicename.

    O nó D recebeu potencialmente transações do nó B e do nó C por meio do nó A. Essas transações serão consideradas na próxima etapa.

  6. No nó D, consulte a tabela MSpeer_lsns. Use as colunas originador e originator_lsn para determinar o número seqüencial do log (LSN) da transação mais recente que o nó D recebeu do nó B.

  7. No nó D, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó B como @subscriber, o nome do banco de dados de destino no nó B como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  8. No nó B, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó D como @subscriber, o nome do banco de dado de destino no nó D como @destination_db, um valor de inicializar do lsn para @sync_type, e o LSN recuperado para o nó B para @subscription.

  9. No nó D, consulte a tabela MSpeer_lsns. Use as colunas originador e originator_lsn para determinar o número seqüencial do log (LSN) da transação mais recente que o nó D recebeu do nó C.

  10. No nó D, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó C como @subscriber, o nome do banco de dados de destino no nó C como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  11. No nó C, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó D como @subscriber, o nome do banco de dado de destino no nó D como @destination_db, um valor de inicializar do lsn para @sync_type, e o LSN recuperado para o nó C para @subscription.

  12. Se tiver qualquer coluna de identidade nas tabelas publicadas, após a operação de restauração, o intervalo de identidade que você atribuiu para as tabelas no nó A será usado também em tabelas no Nó D. Você deve usar o DBCC CHECKIDENT para propagar as tabelas no nó D para garantir que um intervalo diferente esteja em uso para cada uma.

    Para obter mais informações sobre como administrar os intervalos de identidade, consulte a seção "Atribuindo intervalos para administração manual do intervalo de identidade" de Replicando colunas de identidades.

Conforme observado na introdução deste tópico, a principal diferença entre adicionar um nó SQL Server 2005 e adicionar um nó que esteja executando uma versão mais recente do SQL Server é que o SQL Server 2005 requer que você confirme o sistema para conectar o novo nó a todos os nós existentes. O procedimento a seguir indica como adicionar um nó SQL Server 2005 à topologia existente em estágios:

  • O estágio um está coberto pelas etapas 1 a 5. Esse estágio envolve parcialmente a conexão do nó D à topologia criando assinaturas entre o nó A e o nó D. Isto permite que as alterações continuem ocorrendo no nó A, no nó B e no nó C. Alterações no nó D podem ser iniciadas assim que as assinaturas sejam criadas entre o nó A e o nó D. Alterações do nó B e nó C são replicadas para o nó D por meio do nó A.

  • O estágio dois está coberto pelas etapas 6 a 9. Esse estágio envolve completamente a conexão do nó D à topologia criando assinaturas entre o nó B e o nó D e entre o nó C e o nó D. Para este estágio, você deve confirmar o sistema.

    O estágio dois não é necessário, mas proporciona maior tolerância às falhas de que tendo apenas uma conexão entre o nó A e o nó D.

Para adicionar um nó SQL Server 2005 à topologia

  1. Configure o nó D como um Publicador e associe-o a um Distribuidor local ou remoto.

  2. Restaure um backup do nó A para o nó D.

  3. No nó D, execute o sp_addpublication. Especifique o nome da publicação como @publication, um valor de true para @enabled_for_p2p, um valor de ativo para @status e um valor de true para @allow_initialize_from_backup. Para adicionar artigos à publicação, execute o sp_addarticle.

  4. No nó D, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó A como @subscriber, o nome do banco de dados de destino no nó A como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  5. No nó A, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó D como @subscriber, o nome do banco de dado de destino no nó D como @destination_db, um valor de inicializar com backup para @sync_type, e valores apropriados para os parâmetros @backupdevicetype e @backupdevicename.

  6. Confirme a topologia seguindo essas etapas:

    1. Interrompa todas as atividades em todas as tabelas publicadas na topologia ponto a ponto.

    2. Execute o sp_requestpeerresponse no banco de dados no Servidor A, Servidor B, Servidor C e Servidor D, e recupere o parâmetro de saída @request_id.

    3. Por padrão, o Distribution Agent está definido para executar continuamente, portanto, tokens devem ser enviados automaticamente a todos os nós. Se o Distribution Agent não estiver executando em modo contínuo, execute o agente. Para obter mais informações, consulte Conceitos dos executáveis do Replication Agent ou Como iniciar e parar um Replication Agent (SQL Server Management Studio).

    4. Execute o sp_helppeerresponses, fornecendo o valor de @request_id recuperado na etapa 2. Espere até que todos os nós indiquem ter recebido a solicitação de ponto.

    5. Atribua intervalos de identidade novos ao nó D se precisar. Agora, você pode conectar completamente a topologia adicionando as demais assinaturas.

  7. No nó D, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó B como @subscriber, o nome do banco de dados de destino no nó B como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  8. No nó D, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó C como @subscriber, o nome do banco de dados de destino no nó C como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  9. No nó B, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó D como @subscriber, o nome do banco de dados de destino no nó D como @destination_db, e um valor de suporte para replicação somente para @sync_type.

  10. No nó C, execute o sp_addsubscription. Especifique o nome da publicação como @publication, o nome do nó D como @subscriber, o nome do banco de dados de destino no nó D como @destination_db, e um valor de suporte para replicação somente para @sync_type.