SQL Server Database Snapshot

O Database Snaphot (ou instantneo de Banco de Dados, se voc estiver no SQL Server em portugus Que nome terrvel, hehehe) um banco de dados somente leitura,onde o SQL Server guarda os dados originais de tudo o que est sendo alterado pelos usurios, para que seja possvel realizar verificaes (dentre outras coisas) de como estava o banco antes destas ocorrerem.

Ao contrrio do que muita gente pensa, as alteraes ocorrem nas pginas de dados e no no objeto que est sofrendo alterao. O SQL Server utiliza um recurso chamado Copy-on-write onde, antes da pgina ser alterada, os dados originais so armazenados no snapshot.

A minha ideia incial era tentar mostrar dentro das pginas de dados quando estaramos acessando o banco original (consultando o snapshot) e quando estaramos vendo os dados alterados e enviados para o snapshot, porm em conversa com o grande Luciano Moreira (twitter | blog), ele me falou que isso no era possvel (aps um papo com o Paul Randal Loucura esse mundo, ehehe), que cada pgina fica em um mapa de bits na memria e que para buscar isso apenas usando um debugger no SQL Server A j viu n Ficamos assim, hehehehe

Abaixo, tentarei demonstrar o funcionamento do snapshot Mas vou tentar fazer algo diferente: ao invs de jogar todo o script, vou colocar ele por blocos e, no final, disponibilizo o script para download. Depois me digam o que acharam.

Primeiro, vamos criar a base e inserir alguns dados

Vejam que eu criei a coluna Nome como char(2000), apenas para que alguns registros estejam em cada pgina de dados (entenda o que uma pgina de dados aqui).

Feito isso, vamos criar um snapshot:

Notem a sintaxe da criao do snapshot Ela muito semelhante com a de criao de um banco comum, com exceo do Log (que no existe no snapshot) e a informao do banco de origem (AS SNAPSHOT OF ). E aos que esto querendo saber como fazer pelo SSMS, eu sinto muito, mas no possvel. Tem que ser na munheca mesmo (e nem to complicado assim, vai).
Com isso, a nossa estrutura ficou assim, at o momento:

Dando uma olhada nas propriedades do .ss que foi criado d pra ver que o arquivo est praticamente vazio, apesar de uma consulta no banco trazer os dados normalmente (faa um select para confirmar). Isso ocorre pois o snapshot trabalha com o conceito de Sparse Files. Veja a imagem abaixo:

Agora, vamos alterar um registro, apagar outro e inserir um novo e, ento, vamos comparar com o snapshot para ver o resultado:

Viram os valores originais no snapshot?
Com isso, a estrutura passou para a seguinte situao:

possvel realizar a criao de N snapshots, um para cada momento desejado.
Vamos criar um novo snapshot, fazer algumas alteraes, comparar o resultados novamente e ento partir pra excluso e restaurao

A sintaxe para restaurar um snapshot a seguinte:

Porm importante frisar que para a restaurao funcionar, deve existir apenas um snapshot associado, desta forma, todos os demais snapshots devem ser excludos.

Com a base restaurada a partir do snapshot, vejam que a base voltou para o mesmo estado do incio do post.

Consideraes:

  • Snapshot no substitui backup. Ele ajuda para restauraes pontuais, porm como o snapshot diretamente dependente da base original (voc no consegue apagar o banco ou restaur-lo se houver um snapshot associado), qualquer erro que ocorra na base original (base corrompida, falha no disco, etc), os dados no estaro mais seguros.
  • Para criao de bases de testes, homologao e demonstrao uma mo na roda voltar uma base de um snapshot, dependendo do tamanho da base, muito mais rpido. Sem contar que as comparaes das alteraes se tornam muito mais simples de serem verificadas.
  • Esse recurso est disponvel a partir da verso 2005 do SQL Server, porm apenas na edio Enterprise (ou Developer).
  • A complexidade de administrao aumenta um pouco, pois voc tem que prestar muita ateno quando houverem vrios snapshots criados para saber qual ponto restaurar e avaliar a perda do histrico.
  • Voc ter um aumento considervel de I/O de disco ento use-o com sabedoria.

Bom, fico por aqui Faam as suas consideraes e vamos discutindo.

O script completo est aqui. Enjoy!

[]s!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.