Database Mirroring – Failover manual de várias bases ao mesmo tempo
Olá Pessoal,
Como a solução de Database Mirroring do SQL Server é em nível de database, caso uma database fique indisponível, apenas ela sofrerá um failover para outra instancia do SQL Server (utilizando o Operation Mode High Safety with Automatic Failover). Entretanto, é muito comum existir sistemas que utilizam várias databases ao mesmo tempo, assim, com o failover de apenas uma database, grande parte desses sistemas ficariam indisponíveis.
Para solucionar esse problema, deve-se fazer um Failover Manual das outras databases. Com isso, os sistemas passariam a utilizar a outra instancia do SQL Server que recebeu todo o grupo de databases.
Uma ideia para implementar essa solução é criar um job que roda a cada X segundos verificando se todas essas databases interligadas pelos sistemas estão online, caso uma delas não esteja, um failover manual de todas as outras databases será realizado.
Segue abaixo um exemplo de script para ser incluído no Job. Nesse caso existem duas databases que precisam ficar na mesma instancia (Mirror1 e Mirror3).
IF ( SELECT COUNT(*)
FROM sys.database_mirroring m
JOIN sys.databases db ON db.database_id = m.database_id
where name in (‘Mirror1′,’Mirror3’)
and state_desc = ‘ONLINE’
and mirroring_role_desc = ‘PRINCIPAL’
) < 2
begin
select Name
into #Failover_Databases
FROM sys.database_mirroring m
JOIN sys.databases db ON db.database_id = m.database_id
where name in (‘Mirror1′,’Mirror3’)
and state_desc = ‘ONLINE’
and mirroring_role_desc = ‘PRINCIPAL’
declare @name varchar(50),@SQLString nvarchar(500)
while exists (select null from #Failover_Databases)
begin
select top 1 @name = name from #Failover_Databases
set @SQLString = ‘alter database ‘ + @name + ‘ set partner failover’
EXECUTE sp_executesql @SQLString
delete from #Failover_Databases
where name = @name
end
end
Dessa forma, caso uma database sofra um Failover Automático pelo Database Mirroring, a outra database terá um Failover manual executado pela query do Job.
Fica a Dica.
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
Database Mirroring – Tirando o servidor de Witness do Mirror em caso de falha
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
sei q o post é antigo mas me surgiu uma duvida, é possivel fazer utilizarem o mirror para fazer select?