Estou procurando a melhor prática para o seguinte cenário.
Temos um CRM em nossa empresa. Quando um funcionário atualiza o cadastro de uma empresa, existe uma trigger que aciona um stored procedure que possui uma instrução CRUD para o servidor vinculado que hospeda o banco de dados SQL do nosso site.
Pergunta:
O que acontece quando a conexão é perdida no meio do CRUD e o banco de dados SQL do site não foi atualizado? Qual seria a melhor maneira de processar novamente a instrução SQL quando a conexão voltar?
Eu li sobre Service Broker ou Replicação Transacional. Algum desses é mais apropriado para essa situação?
A configuração:
Local: Servidor SQL 2008 R2
Site: SQL server 2008
Em vez de fazer com que o gatilho dependa da disponibilidade do servidor vinculado, use uma tabela de filas. Tenha um trabalho em segundo plano que possa usar sp_testlinkedserver e processar todos os itens na fila somente quando o servidor estiver disponível. Ele também pode usar TRY/CATCH e apenas marcá-los como processados quando forem atualizados com sucesso, caso contrário, continuará tentando sempre que o trabalho em segundo plano for executado.
Isso permite que você continue atualizando a tabela local e não se preocupe com a conexão com o outro servidor (e não fazendo com que suas transações locais esperem na atualização de um servidor remoto).