Sincronização inicial segura para a replicação OLEDB / ODBC do SQL Server

4

Estou tentando configurar a replicação transacional unidirecional do SQL Server 2008 R2 para o PostgreSQL 9.1. Estou tentando o provedor PGNP OLE DB.

Eu posso criar uma assinatura com sucesso, e as transações são realmente replicadas para o servidor PG. Eu estou usando sync_type = 'none' na assinatura, porque parece que, caso contrário, o esquema, incluindo opções específicas do SQL Server (SET ANSI_NULLS ON, etc.) é enviado para o PostgreSQL, o que estraga tudo.

Tudo bem, posso usar o SSIS e copiar todo o meu banco de dados, incluindo dados. Minha pergunta é: como posso fazer isso de maneira segura? Porque se eu apenas executar um pacote do SSIS para exportar os dados, adicione a assinatura, as transações podem se perder.

Por exemplo O SSIS exporta dados para o PG. A linha X é atualizada. A replicação é iniciada. Nesse caso, a atualização da linha X não estaria na minha sincronização manual, mas a replicação iniciada depois. E não posso ter a replicação em execução, porque outros erros podem acontecer.

Qual é o procedimento correto aqui?

    
por MichaelGG 21.01.2012 / 06:27

2 respostas

3

Eu tive várias vezes um problema semelhante. O truque para isso é configurar 2 Assinaturas

  • Aquele que você configurou no momento
  • Outro para um banco de dados do SQL Server, que sincronizará "normalmente"

Então aqui está todo o procedimento:

  1. Configure um assinante do servidor sql, sincronize-o como quiser, o importante é ter certeza de que esse assinante está corretamente sincronizado
  2. Configure sua replicação para o postgres. Tome cuidado para ter todas as tabelas de destino criadas no postgres, mas não se importe com a sincronização de dados.
  3. Nesse estágio, quando você modifica dados no primário, ele é copiado em ambos os escravos. Agora você interrompe o agente LOG READER no Distribuidor. E você espera (graças ao monitor de replicação, por exemplo) que ambos os agentes de assinatura processaram todas as transações para ambos os assinantes.
  4. Truncar todas as tabelas replicadas no assinante POSTGRES
  5. Copie todas as tabelas do Assinante SQL ( NÃO o servidor principal !!) para o Assinante do Postgres.
  6. Os dois assinantes têm exatamente os mesmos dados!
  7. Inicie o agente do Leitor de Log. Você está feito

Por favor, note que enquanto o Log Reader Agent estiver parado, as transações no Publicador ficarão presas no LOG do Publicador. Portanto, tome cuidado para não deixá-lo ir cheio. O passo 5 (copiar os dados) pode ser bem longo, então configure um log suficientemente grande no primário (dependendo do volume da transação).

A propósito, se você colocar o sync_type em 'automatic', o agente snapshost irá gerar um snapshot que também será sincronizado corretamente. Onde está minha recompensa?

    
por 29.01.2012 / 12:38
1

Experimente este artigo Folha de instalação do SQL Server Replication

    
por 21.01.2012 / 19:47