Aguarde… Carregando

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

Deixe uma resposta

%d blogueiros gostam disto: