Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como sincronizar dois (ou n) processos de replicação para bancos de dados SQL Server?


Parece que essa determinada tarefa não pode ser resolvida em determinadas restrições. Se entendi corretamente, o número de bancos de dados e o esquema da linha são constantes.

Então, variáveis ​​que saíram:
  • "injeções" adicionais ao banco de dados
  • Truques temporais
  • Truques de gatilhos
  • "Late binding" de alterações, que não foram replicadas a tempo

Atualmente, encontrei apenas uma ideia, que parece funcionar:
  1. Adicione um acionador na tabela "Linhas" para modificar o carimbo de data/hora do registro "Pedido" (last_line_time)
  2. Na réplica, espere até que apareça uma Linha com tempo igual a last_line_time.
    • Se max(lines.line_time)> order.last_line_time, então o pedido é obsoleto
    • Se max(lines.line_time)
    • Se max(lines.line_time) ==order.last_line_time tudo está OK, por enquanto :)

Mas, este caso pode falhar em loop infinito, se as linhas forem constantemente modificadas e a réplica da tabela de linhas sempre ficar para trás.