Loading…

Database Mirroring – Tirando o servidor de Witness do Mirror em caso de falha

Olá Pessoal,

Continuando a série de posts sobre Database Mirroring que já tenho semi prontos (faltam mais 3 posts após esse), segue mais um teste realizado.

O objetivo desse teste é provar que o servidor de produção em um Mirror pode parar mesmo sem acontecer nenhum problema com ele. Em seguida, também é dada uma solução para evitar que isso aconteça.

Instancias participantes dos testes:

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

Nome da database espelhada: Mirror1

Quando o servidor de Witness está no ar ele possui o status CONNECTED na coluna mirroring_witness_state_desc da query abaixo:

SELECT db.name, m.mirroring_role_desc , mirroring_state_desc,mirroring_safety_level_desc,
mirroring_partner_instance,    mirroring_witness_state_desc
FROM sys.database_mirroring m
JOIN sys.databases db ON db.database_id = m.database_id
where Name = ‘Mirror1’

Quando o servidor Witness fica indisponível, essa coluna retorna: DISCONNECTED:

Nesse momento, caso o servidor B (Mirror) fique Offline, o servidor de produção também ficará Offline mesmo sem ter acontecido nenhum problema com ele.

Na execução de uma simples query no servidor A: Use Mirror1

O erro abaixo é retornado:

Se no momento em que o servidor Witness ficar Offline, você retirá-lo do mirror, o seu servidor de produção não ficará vulnerável.

Para retirar o servidor Witness, basta executar o comando:

ALTER DATABASE mirror1 set witness off

Eliminando o servidor Witness do mirror, agora a coluna mirroring_witness_state_desc retorna o valor : UNKNOWN

Com isso voltamos para o Operation mode High Safety Without Failorver

Agora o servidor B (Mirror) pode cair que o principal não vai parar.

Minha sugestão: Criar o job com a query abaixo:

if (select mirroring_witness_state_desc
FROM sys.database_mirroring m
JOIN sys.databases db ON db.database_id = m.database_id
WHERE Name = ‘Mirror1’) = ‘DISCONNECTED’
begin
ALTER DATABASE mirror1 set witness off
End

Para adicionar o witness novamente basta executar o comando abaixo:

ALTER DATABASE Mirror1
SET WITNESS = ‘tcp://ambiente5.lab.local:5024’

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

Database Mirroring – Operation Mode High Safety with Automatic Failover

Database Mirroring – Tempo Failover – HS With Automatic Failover com Timeout

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