Para descarregar relatórios, tenho uma replicação transacional em execução entre minha caixa de produção e meu servidor de relatórios (imagem superior nº 1). Isso funciona muito bem até que o instantâneo precise ser reconstruído. Durante esse período, os usuários/aplicativos/relatórios estão lendo um conjunto de dados incompleto enquanto o banco de dados de relatórios está sendo reconstruído.
Alguém mais experimenta esse problema? Qual é o melhor trabalho ao redor?
O nº 2 na imagem é uma solução razoável? Crie um banco de dados shell em cima de um repositório de dados. O banco de dados de relatórios não contém mais dados, mas apenas exibições que replicam a estrutura das tabelas no repositório de dados. Durante uma reconstrução do banco de dados "repositório de dados", o "banco de dados de relatórios" é definido offline para impedir que usuários/aplicativos/repositórios leiam dados incompletos?
Sim, isso é razoável. Você pode otimizar ainda mais essa abordagem apontando os usuários para um instantâneo ou uma cópia restaurada do banco de dados do assinante durante o tempo de inatividade, por exemplo, por https://techcommunity.microsoft.com/t5/DataCAT/Microsoft-SQL-Server-Database-Snapshots- and-Synonyms/ba-p/304987 , ou reinicializando a assinatura a partir de um backup , o que pode ser mais rápido do que usar um instantâneo.
Ou você pode simplesmente desabilitar os logins dos usuários de relatórios e encerrar suas sessões durante o tempo de inatividade.