AndersonPatricio.org v4
Database Snapshots no SQL Server 2005

AP320 - Database Snapshots no SQL Server 2005

Autor: Alexandre Lopes
Publicação: 12/04/2008
Compartilhe este artigo: Bookmark and Share

Overview

Neste artigo irei demonstrar uma característica nova do SQL Server 2005: A disponibilidade de dados de forma segura e somente para leitura (read-only) utilizando a funcionalidade denominada “Database Snapshots”. Tenho notado que os IT Pros e Developers possuem muitas dúvidas sobre esse tema e irei demonstrar como é extremamente simples e confiável o seu uso.

Solução

Visão geral do Database Snapshot
Voce cria um Database Snapshot a partir de um banco de dados de origem que pode se encontrar em produção ou desenvolvimento. O objetivo é ter uma cópia somente-leitura (read-only) e instantanea do banco de dados desejado. Por se tratar de uma cópia somente-leitura (read-only), deve-se observar que não contém log de transações e não possui característica embutida para gravação. 

No momento em que foi criado, o Database Snapshot não contém qualquer dado e consume um espaço em disco muito pequeno, daí o seu poder de criação instantanea mesmo em bancos de dados com tamanhos de terabytes, por exemplo. Todos os objetos existentes no banco de dados de origem também existirão no Database Snapshot. Voce não pode adicionar ou excluir usuarios, alterar permissões, ou modificar qualquer objeto ou dado contido no Database Snapshot.

Existe um elo de ligação ("link") do banco de dados origem com o Database Snapshot, quando uma pagina de dados é alterada na origem, o SQL Server escreve a imagem original no Database Snapshot. Qualquer alteração subsequente na pagina de dados não é tratada pelo elo de ligação fazendo com que o Database Snapshot mantenha a imagem original dos dados no momento da criação. 

Cria-se Database Snapshot da mesma forma com que se cria qualquer outro database no SQL Server, ou seja, através do comando CREATE DATABASE, adicionando uma cláusula ao comando para especificar que se trata de um Database Snapshot. Sintaxe básica para criação de um Database Snapshot: 

CREATE DATABASE database_snapshot_name
ON
(
NAME = logical_file_name,
FILENAME = ’os_file_name’
) [ ,...n ]
AS SNAPSHOT OF source_database_name

Existem restrições em relação ao Database Snapshot e devem ser levadas em consideração no momento da definição do projeto:

· Não é permitido realizar backup, restore ou detach no Database Snapshot;
· Tem de ser criado e mantido na mesma instância do banco de dados de origem;
· Não se pode criar Database Snapshots de bancos de dados do sistema (master, tempdb, ...);
· Não é permitido alterações na estrutura e adição ou remoção de filegroups.
Duas considerações interessantes devem ser observadas:
· Não é permitido utilizar os comandos DROP, DETACH ou RESTORE no banco de dados de origem.
· Em um espelhamento de banco de dados (“Database Mirroring”) é possível criar um Database Snapshot.

Selecionando dados do Database Snapshot 

Escrever um SELECT para utilizar um Database Snapshot não difere em nada de escrever para qualquer outro banco de dados. O resultado da query no Database Snapshot é obtido de duas fontes com os dados sendo combinados em um único resultado. Os dados que não foram alterados após a criação do Database Snapshot são oriundos do banco de dados de origem. Dados que foram alterados após a criação do Database Snapshot são obtidos de páginas de dados escritas no Database Snapshot.

Criando o Database Snapshot 

Neste momento vamos criar um Database Snapshot do banco de dados AdventureWorks, seguindo os passos abaixo descritos:

· No SQL Server Management Studio (SSMS), conecte-se na instância que contém o banco de dados de origem, no exemplo, AdventureWorks;
· Clique em “New Query” na Toolbar;
· Digite o codigo Transact-SQL abaixo:

Create Database AdventureWorksSnapshotOn (Name = “AdventureWorks_Data”,Filename = “C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorksSnapshot.ds”) As Snapshot Of AdventureWorks

Criado o Database Snapshot, convém realizar duas tarefas extremamente simples para identificar se o procedimento de criação do Database Snapshot não apresentou problemas:
1. Inclua dados no banco de dados de origem.
2. Observe que os dados não foram copiados para o Database Snapshot.

Uma dúvida bastante comum seria essa: “Os dados inseridos não deveriam ser replicados” para o Database Snapshot ? Não, pois ao contrário das tecnologias de replicação do SQL Server 2005, o fundamento do Database Snapshot é manter uma “foto instantanea” do banco de dados de origem no momento em que o Snapshot foi criado. Como pode ser observado, o Database Snapshot é uma cópia de um banco de dados no momento da criação. Qualquer alteração em objetos na origem não afetam o Database Snapshot. Bancos de dados para validação e Data Warehouse são alguns dos exemplos de uso para o Database Snapshot.

Revertendo o Database Snapshot
Apesar de não ser recomendado, pode ser utilizado, em algumas situações, como backup de um banco de dados, mas sem esquecer de continuar a usar a política de backups específicas.
No caso de se desejar voltar o banco de dados de origem ao estado em que se encontrava no momento em que se criou o Database Snapshot, deve-se utilizar a seguinte sintaxe: 

RESTORE DATABASE <database> FROM DATABASE_SNAPSHOT = <databasesnap> 

Na prática seria realizado seguindo os passos abaixo descritos:
· No SQL Server Management Studio (SSMS), conecte-se na instância que contém o Database Snapshot;
· Clique em “New Query” na Toolbar;
· Digite o codigo Transact-SQL abaixo:

RESTORE DATABASE AdventureWorks FROM DATABASE_SNAPSHOT = “AdventureWorksSnapshot”



Conclusão

Com o SQL Server 2005, tornou-se prático e acessível a utilização de snapshots (“fotos instantâneas”) do banco de dados para tornar-lo disponível para consultas, validação de informações..

Comentários

Neste espaço você pode utilizar sua rede social preferida para adicionar dicas e/ou qualquer informação adicional para ajudar a comunidade relacionado a este Tutorial.

Suporte Tecnico



Clique aqui

Certificados Digitais



Saiba mais