Loading…

Database Mirroring – Configurando um Snapshot no servidor Mirror

Fala Pessoal,

Todos se perguntam se é possível fazer relatórios com a base de dados que está sendo espelhada pelo Database Mirroring. Isso é possível apenas criando um Snapshot dessa database, ou seja, você consegue ter uma foto da base para fazer consultas.

Para criar uma database Read-Only no servidor de mirror temos que criar um snapshot da database que está sendo espelhada com o comando abaixo:

create database Mirror3_Snapshot
on
(Name = Mirror3,
FileName = ‘c:\Mirror3_Snapshot.ss’)
AS SNAPSHOT OF Mirror3

Onde,

Mirror3_Snapshot => Nome da database snapshot

“Name = Mirror3” => Mirror3 é o nome lógico do arquivo mdf da database principal

“c:\Mirror3_Snapshot.ss” => Caminho e nome do Sparse File

“SNAPSHOT OF Mirror3” => Mirror3_Snapshot será uma cópia da database Mirror3

Após a execução desse comando, uma database para consultas já está disponibilizada no servidor mirror. Essa database fica visível na pasta Database Snapshots conforme a figura abaixo:

Como essa database é readonly, não será possível alterar dados na mesma.
Ex: O comando abaixo:

select *
into _Usuarios
from sys.sysusers

Gera o erro:

Entretanto, podemos criar tabelas temporárias para utilizar em nossas rotinas de relatórios, pois elas ficam armazenadas no TempDB. O Comando abaixo é executado com sucesso.

select uid
into #TesteSnapshot
from sys.sysusers

Para manter um servidor D-1 sempre atualizado, podemos executar um job diário às 00:00h com os comandos abaixo:

use master
if OBJECT_ID(‘tempdb..#Processos’) is not null
drop table #Processos

Declare @SpId as varchar(5)
select Cast(spid as varchar(5))SpId
into #Processos
from master.dbo.sysprocesses A
join master.dbo.sysdatabases B on A.DbId = B.DbId
where B.Name =’Mirror3_Snapshot’

while (select count(*) from #Processos) >0
begin
set @SpId = (select top 1 SpID from #Processos)
exec (‘Kill ‘ +     @SpId)
delete from #Processos where SpID = @SpId
end

drop database Mirror3_Snapshot

create database Mirror3_Snapshot
on
(Name = Mirror3,
FileName = ‘c:\Mirror3_Snapshot.ss’)
AS SNAPSHOT OF Mirror3

Dessa forma você teria uma foto do seu ambiente com os dados do dia anterior que poderiam ser utilizados para a geração de relatórios.

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

Database Mirroring – Failover manual de várias bases ao mesmo tempo

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

4 thoughts on “Database Mirroring – Configurando um Snapshot no servidor Mirror

  1. Boa tarde Fabrício,
    Estou montando um mirro no sql server 2012, entre 3 maquinas, porém eu gostaria de saber quais são os niveis de permissão que eu devo ter no windows, em relação aos serviços. Qual é melhor estrutura para eu montar o meu mirror?
    Desculpa se aqui não for o local certo de fazer esta postagem
    Obrigado.

    1. No mirror vai ter que tirar uma foto da base espelhada (snapshot) para conseguir fazer select nela.

      Tem que conferir ainda se só funciona na enterprise isso.

      Nunca usei em produção.

      SOlução enterprise é o AG enterprise.

      Ou replicação de tabelas.

Deixe uma resposta