Tenho duas instâncias do SQL Server 2014 configuradas com espelhamento de alta segurança para um ambiente de produção. Preciso aplicar patches de segurança a esses servidores regularmente, o que requer uma reinicialização.
Meu processo típico é aplicar patches para espelhar e reiniciar. Em seguida, acionar um failover para espelhar e aplicar patches no outro servidor. Reiniciando e depois falhando.
Meu problema é que todo failover tem algumas transações não confirmadas revertidas e isso realmente não é bom para um ambiente de produção. Não tenho ideia de quais transações foram revertidas e que tipo de perda de dados estou tendo. Mas preciso reiniciar esses servidores e aplicar patches. Se eu tiver tolerância zero à perda de dados, quais são minhas opções?
No modo FULL SAFETY, você deve fazer isso sem perda de dados se não houver transações em andamento. Você está esperando que o estado mude de Sincronizando para Sincronizado após a reinicialização? Meu palpite é que os usuários do aplicativo estão lá quando você está fazendo o failover.
Se os aplicativos ainda estiverem se conectando e os dados ainda estiverem sendo modificados, há transações em andamento e esse é o preço que você deve pagar. Melhor para obter uma janela e parar o acesso. Desligue o site ou aplicativos que acessam SQL, etc.
Você precisará desabilitar os logins no servidor, aguardar a conclusão de todas as transações em andamento e executar o failover.
Ou isso, ou você precisa reescrever o código do cliente para entender quando os rollbacks ocorrem e esperar/tentar novamente até que eles possam concluir a transação com sucesso.
Embora o failover de espelhamento seja extremamente rápido, as transações em andamento não podem ser movidas entre
BEGIN TRANSACTION
eCOMMIT TRANSACTION
de um servidor para outro.