Loading…

Database Mirroring – Error: The Command Failed Because The Database Mirror Is Busy

Fala Pessoal,

Nesse post vou compartilhar com vocês um erro que encontrei em um dos meus testes com Database Mirroring.

Instancias participantes dos testes:

1 – Instancia5              – Servidor Principal que chamarei de Servidor A
2 – Instancia5\INST1    – Servidor Mirror que chamarei de Servidor B

Nome da database espelhada: Mirror1

Com um Database Mirroring configurado com o Operation Mode High Safety Without Automatic Failover.

Caso um problema aconteça com o seu servidor A (principal), o mirror fica conforme abaixo:

Como nesse operation mode não temos um failover automático, o mirror fica nesse status até que o servidor A volte ou você force o Mirror a assumir como principal.

Nesse momento, vem na nossa cabeça que o comando para realizar um failover manual é o abaixo:

alter database mirror1 set partner failover

Entretanto, ao executar esse comando, recebemos o erro abaixo:

No link (http://msdn.microsoft.com/pt-br/library/ms191449.aspx), temos a seguinte informação:

Condições exigidas para um Failover Manual:

O failover manual exige que a segurança da transação seja definida como FULL (ou seja, modo de alta segurança). Quando os parceiros estão conectados e o banco de dados já está sincronizado, há suporte ao failover manual.

O failover manual inicia a seguinte sequência de ações:

  • O servidor principal desconecta clientes do banco de dados principal, envia a parte final do log ao servidor espelho e, na preparação para alternar para a função espelho, define o estado de espelhamento como SYNCHRONIZING.
  • O servidor espelho registra o LSN (número de sequência de log) do último registro de log recebido do principal como o LSN do failover.
  • Se algum log estiver esperando na fila de restauração, o servidor espelho concluirá o roll forward do banco de dados espelho. A quantidade de tempo exigida depende da velocidade do sistema, da carga de trabalho recente e da quantidade de log na fila de restauração. Para um modo operacional síncrono, o tempo de failover pode ser regulado limitando o tamanho da fila de restauração. Porém, isso pode reduzir a velocidade do servidor principal para permitir que o servidor espelho seja mantido.
  • O servidor espelho se torna o servidor principal, e o servidor principal anterior se torna o novo servidor espelho.
  • O novo servidor principal reverte qualquer transação não confirmada e usa sua cópia do banco de dados online como o banco de dados principal.
  • O servidor principal anterior assume a função de espelho, e o banco de dados principal anterior se torna o banco de dados espelho. O novo servidor espelho rapidamente faz nova sincronização do novo banco de dados espelho com o novo banco de dados principal.

Ou seja, para se fazer um failover manual, os dois servidores devem estar online.

Caso você não possa esperar o servidor A voltar, a única solução é acabar com o mirror, mas isso pode gerar uma perda de dados se seu banco não tiver completamente sincronizado.

ALTER DATABASE MIRROR1 SET PARTNER OFF
GO
RESTORE DATABASE MIRROR1 WITH RECOVERY

Nesse momento a database mirror1 ficou disponível no servidor B.

Artigos relacionados:

Série de Posts sobre Database Mirroring

Database Mirroring – Como alterar o Operation Mode

Database Mirroring – Operation Mode High Performance – Parte 1

Database Mirroring – Operation Mode High Performance – Parte 2

Database Mirroring – Operation Mode High Performance – Parte 3

Database Mirroring – Operation Mode High Safety Without Failover – Parte 1

Database Mirroring – Operation Mode High Safety Without Failover – Parte 2

Até o próximo post.

Gostou desse Post?

Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.

Abraços,

Fabrício Lima

MCITP – Database Administrator

Consultor e Instrutor SQL Server

Trabalha com SQL Server desde 2006

Deixe uma resposta