Este é um problema muito comum, enfrentado por praticamente todos os DBA que têm responsabilidades tanto com as equipes de aplicativos quanto de BI. Considere o seguinte:
- Você tem dois servidores T-SQL , Produção e Relatórios.
- Todos os dias, às 6h, você deseja copiar novos dados da Produção para o Relatório. Pode haver filtros ou algum outro ETL feito neste processo.
- Você não deseja copiar mais dados do que o necessário, então, idealmente, você deseja algum
MERGE
tipo.
Quais são as soluções idiomáticas para este problema?
Em minha própria pesquisa, descobri:
- Servidores vinculados - Eles são muito lentos ao fazer upserts e tendem a enviar toda a tabela pela rede quando são necessárias apenas algumas linhas.
- SSIS - Dolorosamente não portável, muito antigo e força você a passar por obstáculos extras, como colocar tabelas de teste em ambos os servidores.
Espero que haja algo melhor.
A partir das informações que você forneceu, recomendo que você dê uma olhada no Azure Data Factory se você for compatível com a nuvem. Isso permitiria que você enviasse apenas as linhas necessárias de um servidor para outro (supondo que você tenha uma lógica que permita rastrear alterações na origem). Semelhante ao SSIS, mas um pouco mais moderno, e permite construir pipelines ETL .
Como outro usuário mencionou, a replicação transacional também pode funcionar. Você pode escolher quais colunas/campos você está replicando.
Outras opções que você pode examinar, mas que podem ser um exagero, seriam: envio de log e grupos de disponibilidade sempre ativos. Ambos são replicação em vez de ETL, mas permitiriam que você fizesse toda a sua transformação no servidor de destino. (bônus, você tem um banco de dados de backup se a produção cair repentinamente)