Estou testando um processo de replicação de instantâneo (SQLServer 2008 (sim, infelizmente...)).
Está tudo bem, mas não consigo encontrar na documentação do MS como as tabelas são atualizadas. Vi que o processo de publicação descarta as tabelas, depois as recria e as preenche com dados.
OK, fixe. Mas existe algum tipo de segurança (bloqueios, transações...) que impeça que seja feita uma consulta durante esta sincronização (em particular apenas entre a drop table e a create)?
Vamos imaginar um banco de dados A
( publisher ) tendo uma tabela T
replicada em outro banco de dados B
( subscriber ). Quando o agente de distribuição está em execução e a tabela T
é atualizada no servidor B ( drop table T + create table T + bcp-in data ?), durante alguns milissegundos a tabela não estará lá. Se um aplicativo tentar ler table T
, ele receberá um erro.
Quando tento iniciar um rastreamento no servidor B
quando o agente de distribuição está em execução, não consigo ver nenhuma transação feita para esta etapa. E, de fato, posso fazer uma seleção em uma tabela replicada T
no servidor B
(e obter um erro).
É realmente assim que deve funcionar?
Existem configurações em algum lugar para evitar tal comportamento?
É realmente assim que deve funcionar?
Sim, é assim que deve funcionar. Você só executa o instantâneo no início da configuração da replicação transacional. A menos que você esteja fora de sincronia devido a algum erro, você não precisa executar o snapshot novamente. Se você estiver executando SOMENTE a replicação de instantâneo, poderá controlar quando deseja ressincronizar todos os seus artigos e nada deve se conectar ao assinante enquanto o instantâneo estiver sendo aplicado.
Dos livros online :
Quando uma assinatura está disponível; quando o banco de dados de assinatura pode ser usado?
Existem configurações em algum lugar para evitar tal comportamento?
Se você tem certeza de que seu esquema e dados já estão sincronizados ou deseja apenas que as alterações futuras sejam replicadas, você pode usar a opção a seguir para evitar o instantâneo. Eu usei isso muitas vezes durante a atualização com tempo de inatividade.
@sync_type=replication support only