Database snapshot no desenvolvimento

Diariamente me perguntam sobre as novas funcionalidades do SQL Server 2005, qual é o melhor cenário para as utilizarmos, como fazer troubleshooting, ajustes de desempenho, etc. Porém sempre estamos pensando no ambiente de produção e nos esquecemos de onde as aplicações saem... Das mesas dos desenvolvedores.

O SQL Server 2005 trouxe o database snapshot para nossa realidade. Esse recurso, como o próprio nome diz, nos permite tirar uma “foto” do banco de dados utilizando o conceito de copy-on-write.

Copy-on-write: o snapshot está inicialmente vazio quando uma operação no SQL Server altera, por exemplo, a página 234 do arquivo 1 (1:234). Aí a versão original da página é copiada para o snapshot no momento da escrita (tradução literal do nome copy-on-write!). Se outra operação insere um registro na página 1:350, a versão original da página é copiada para esse arquivo, que passa a conter 16K de dados (2 páginas de 8K). Se outra transação alterasse a página 1:234 essa não precisaria ser escrita novamente no snapshot, pois somente a imagem inicial é a que importa.

E o que isso tem a ver com o desenvolvedor? Tudo! Quantas vezes você não queria testar aquela nova funcionalidade e, toda vez antes de testá-la tinha que subir um backup do banco de dados? E aqueles testes de unidade, que te forçavam a ficar escrevendo uma bateria de scripts de setup para fazer tudo funcionar redondinho? Seus problemas acabaram!

Com database snapshot podemos popular um banco de dados com as informações necessárias para fazer nossos testes, seguindo depois o script abaixo:

1 – Crie o banco de dados com a massa para teste (usarei o famoso Inside)

2 – Crie um snapshot do banco

CREATE DATABASE InsideSnapshot

ON PRIMARY

(NAME = 'Inside',

FILENAME = 'C:\InsideSnapshot_data.mdf')

AS SNAPSHOT OF Inside

3 – Faça o que quiser! Crie indices, apague dados, insira registros e pode rodar aquele seu teste de unidade que praticamente destrói o banco de dados.

4 – Recupere a imagem original do banco de dados:

USE MASTER

go

RESTORE DATABASE Inside

FROM DATABASE_SNAPSHOT = 'InsideSnapshot'

5 – Repita os passos 3 e 4 quantas vezes quiserem. Não é necessário criar outro snapshot, pois o que foi criado continua valendo.

Acredito que essa tecnologia pode ajudar muito os desenvolvedores, testers e os DBAs, que não precisam mais se preocupar em manter os dados originais, podendo utilizar esse recurso para assegurar seus dados.

Esse post faz parte da série “rapidinhas”. J

[]s

Luciano Caixeta Moreira

luciano.moreira@microsoft.com