Estou tentando implementar a replicação de mesclagem entre apenas dois servidores, um editor e um assinante.
Suponha estas tabelas:
--Main table in Publisher
Ticket (id, userId, reqId, blockedDate, usedDate, returnDate, transferDate, ...)
--On Subscriber (The fields are in Publication)
Ticket (id, userId, blockedDate, usedDate)
Devemos atribuir a data atual transferDate
sempre que uma linha for para o Assinante e atribuir returnDate
sempre que ela voltar do Assinante. Como temos que considerar uma sincronização de arquivo (transferência/retorno de dados de/para o assinante com um pendrive!), esses campos devem ser atribuídos na sincronização na sincronização de arquivo ou na replicação.
Eu sei que você pode adicionar sua lógica de negócios personalizada para resolução de conflitos (quando ocorre um conflito). Estou procurando algo como gatilhos para eventos de replicação, que me dão a capacidade de manipular alguns campos fora da Publicação (ou até mesmo outra tabela sempre que necessário).
Perguntas
É possível lidar com eventos de replicação (push e pull) manualmente?** (personalize ou substitua PULL/PUSH's. Não resolvedor de conflitos)**
Você pode me dar uma comparação entre implementar uma replicação de mesclagem personalizada e sincronizar com a ajuda de um
distributed transaction
SP?
Eu preciso que a sincronização seja agendada (à meia-noite quando não há carga no servidor de banco de dados), MAS é altamente necessário que possamos sincronizar manualmente (de dentro de nosso aplicativo da web).
Na segunda pergunta, preciso de seu desempenho, confiabilidade e, claro, sua capacidade de manutenção. Esses fatores, especialmente os dois primeiros, são uma grande preocupação. Suponha que o Publicador possa ter cerca de milhões de registros e o Assinante possa ter cerca de dez mil. Assim, a cada sincronização, cerca de dez mil registros serão transferidos.
A replicação de mesclagem verifica as linhas; se houver uma alteração e não houver um conflito, a linha será mesclada. se houver um conflito, um resolvedor de conflitos (pode ser seu resolvedor de procedimento armazenado personalizado) lidará com o conflito. Eu quero escrever minha própria lógica no primeiro caso (dados alterados sem conflito) em vez do mecanismo de mesclagem interno do SQL. Claramente eu quero personalizá-lo.
Há apenas id, userId, blockedDate, usedDate
colunas no artigo. Eu quero preencher returnDate
sempre que a Ticket
voltar para o Publisher (em um pull ) e preencher transferDate
sempre que Ticket
for para o Subscriber (em um push ).