Como funcionam os instantâneos de banco de dados

Um instantâneo do banco de dados fornece uma exibição estática do tipo somente leitura de um banco de dados de origem como era no momento da criação do instantâneo, menos qualquer transação não confirmada. As transações não confirmadas são revertidas em um novo instantâneo do banco de dados, devido ao Mecanismo de Banco de Dados executar a recuperação após a criação do instantâneo (as transações do banco de dados não são afetadas).

Os instantâneos do banco de dados são dependentes do banco de dados de origem. Os instantâneos de um banco de dados devem estar na mesma instância de servidor que o banco de dados. Além disso, se o banco de dados ficar indisponível por qualquer razão, todos os seus instantâneos do banco de dados também ficarão indisponíveis.

Os instantâneos podem ser utilizados para fins de geração de relatórios. Além disso, no caso de um erro do usuário em um banco de dados de origem, você poderá reverter o banco de dados de origem ao estado em que estava quando o instantâneo foi criado. A perda de dados é limitada a atualizações no banco de dados desde a criação do instantâneo. Além disso, a criação de um instantâneo do banco de dados pode ser útil imediatamente antes de fazer uma alteração importante em um banco de dados, como alterar o esquema ou a estrutura de uma tabela. Para obter mais informações sobre a utilização dos instantâneos, consulte Usos comuns dos instantâneos do banco de dados.

O compreendimento do funcionamento dos instantâneos é útil, embora não seja essencial para utilizá-los. Os instantâneos do banco de dados funcionam no nível da página de dados. Antes que uma página do banco de dados de origem seja modificada pela primeira vez, a página original é copiada do banco de dados de origem ao instantâneo. Esse processo é chamado de operação de cópia na gravação. O instantâneo armazena a página original, preservando os registros de dados da forma como existiam quando o instantâneo foi criado. As atualizações subseqüentes dos registros em uma página modificada não afetam o conteúdo do instantâneo. O mesmo processo é repetido para todas as páginas modificadas pela primeira vez. Desse modo, o instantâneo preserva as páginas originais de todos os registros de dados modificados desde a criação do instantâneo.

Para armazenar as páginas originais copiadas, o instantâneo usa um ou mais arquivos esparsos. Inicialmente, um arquivo esparso é, essencialmente, um arquivo vazio que não contém dados de usuário e no qual ainda não foi alocado espaço em disco para os dados do usuário. À medida que mais páginas são atualizadas no banco de dados de origem, o tamanho do arquivo aumenta. Quando um instantâneo é criado, o arquivo esparso ocupa um pequeno espaço no disco. Como o banco de dados é atualizado com o passar do tempo, um arquivo esparso pode se tornar um arquivo muito grande. Para obter mais informações sobre arquivos esparsos, consulte Compreendendo tamanhos de arquivo esparso em instantâneos do banco de dados.

A figura a seguir mostra uma operação de cópia na gravação. Os retângulos cinza claros no diagrama do instantâneo representam espaço potencial em um arquivo esparso que ainda não está alocado. Ao receber a primeira atualização de uma página no banco de dados de origem, o Mecanismo de Banco de Dados faz a gravação no arquivo e o sistema operacional aloca espaço nos arquivos esparsos do instantâneo e copia a página original nesse espaço. O Mecanismo de Banco de Dados atualiza a página no banco de dados de origem. A figura a seguir mostra essa operação de cópia na gravação.

Operação de leitura no instantâneo depois da atualização da página

Observação importanteImportante

Como os instantâneos do banco de dados não são um armazenamento redundante, não têm proteção contra erros de disco ou outros tipos de danos. Fazer backups e testar regularmente seu plano de restauração é essencial para proteger um banco de dados. Se for necessário restaurar o banco de dados de origem no momento determinado em que você criou um instantâneo do banco de dados, implemente uma diretiva de backup que lhe permita fazer isso.

Operações de leitura em um instantâneo do banco de dados

Para o usuário, um instantâneo do banco de dados parece nunca ser alterado, porque as operações de leitura em um instantâneo do banco de dados sempre acessam as páginas de dados originais, independentemente de onde elas residam.

Se a página ainda não tiver sido atualizada no banco de dados de origem, uma operação de leitura no instantâneo lerá a página original do banco de dados de origem. A figura a seguir mostra uma operação de leitura em um instantâneo criado recentemente, cujo arquivo esparso não contém nenhuma página. Essa operação de leitura lê somente a partir do banco de dados de origem.

Operação de leitura antes de copiar a primeira página no instantâneo

Após a atualização de uma página, uma operação de leitura no instantâneo ainda acessará a página original, que agora está armazenada em um arquivo esparso. A figura a seguir mostra uma operação de leitura no instantâneo que acessa uma página depois de sua atualização no banco de dados de origem. A operação de leitura lê a página original do arquivo esparso do instantâneo.

Operação de cópia na gravação

Efeito do padrão de atualização no crescimento do instantâneo do banco de dados

Se seu banco de dados de origem for razoavelmente grande e você se preocupar com a utilização do espaço em disco, em algum momento deverá substituir um instantâneo antigo por um novo. O tempo de vida ideal de um instantâneo depende de sua taxa de crescimento e do espaço em disco disponível para os arquivos esparsos. O espaço em disco necessário para um instantâneo depende de quantas páginas diferentes no banco de dados de origem são atualizadas durante a vida do instantâneo. Portanto, se as atualizações forem feitas principalmente para um pequeno subconjunto de páginas que são atualizadas repetidamente, a taxa de crescimento diminuirá com o passar do tempo e as exigências de espaço em disco permanecerão relativamente pequenas. Por outro lado, quando todas as páginas originais forem atualizadas pelo menos uma vez, o instantâneo ficará com o mesmo tamanho que o banco de dados de origem. Se o disco começar a ficar cheio, os instantâneos competirão entre si pelo espaço em disco. Se a unidade de disco ficar cheia, ocorrerá falha nas operações de gravação de todos os instantâneos.

ObservaçãoObservação

Para obter informações sobre como saber os tamanhos reais e potenciais de um instantâneo, consulte Compreendendo tamanhos de arquivo esparso em instantâneos do banco de dados.

Portanto, é útil saber os padrões típicos de atualização de um banco de dados ao planejar a quantidade de espaço necessária durante o tempo de vida planejado de um instantâneo. Para alguns bancos de dados, a taxa de atualizações pode ser praticamente constante; por exemplo, um banco de dados de estoque poderia ter muitas de suas páginas atualizadas diariamente, tornando útil a substituição de instantâneos antigos diária ou semanalmente. Para outros bancos de dados, a proporção de páginas atualizadas pode variar durante o ciclo de negócios; por exemplo, um banco de dados de catálogo poderia ser atualizado trimestralmente, com atualizações ocasionais em outros momentos. A criação de instantâneos um pouco antes e depois de cada atualização trimestral seria uma estratégia lógica. O instantâneo de pré-atualização permitiria a reversão se ocorresse um erro significativo de atualização e o instantâneo de pós-atualização poderia ser utilizado para relatar gravações durante o próximo trimestre.

A figura a seguir mostra os efeitos de dois padrões de atualização contrastantes no tamanho de um instantâneo. O padrão de atualização A reflete um ambiente em que apenas 30% das páginas originais são atualizadas durante a vida do instantâneo. O padrão de atualização B reflete um ambiente em que 80% das páginas originais são atualizadas durante a vida do instantâneo.

Padrões alternativos de atualização e tamanho do instantâneo

Metadados sobre instantâneos do banco de dados

Para instantâneos do banco de dados, os metadados de banco de dados incluem a propriedade source_database_id, que é armazenada em uma coluna da exibição do catálogo sys.databases. Para obter mais informações sobre essa propriedade, consulte sys.databases (Transact-SQL).

Geralmente, um instantâneo do banco de dados não expõe seus próprios metadados, mas expõe os metadados de seu banco de dados de origem. Por exemplo, esses metadados incluem os dados retornados pela seguinte instrução:

USE <database_snapshot> SELECT * FROM sys.database_files 

Em que <database_snapshot> é o nome de um instantâneo do banco de dados.

As únicas exceções são quando o banco de dados de origem utiliza a pesquisa de texto completo ou o espelhamento de banco de dados, que é desabilitado em um instantâneo alterando alguns valores nos metadados do instantâneo.