Compartilhar via


Instantâneos de banco de dados (SQL Server)

Aplica-se:SQL Server

Um instantâneo de banco de dados é uma exibição estática somente leitura de um banco de dados do SQL Server (o banco de dados de origem). Ele é consistente em termos de transações com o banco de dados de origem no momento da criação do instantâneo e sempre reside na mesma instância do servidor que o seu banco de dados de origem. Embora os instantâneos do banco de dados forneçam uma exibição somente leitura dos dados no mesmo estado em que o instantâneo foi criado, o tamanho do arquivo de instantâneo aumenta conforme as alterações são feitas no banco de dados de origem.

Embora os instantâneos de banco de dados possam ser benéficos durante as principais atualizações de esquema e permitir a reversão para um estado anterior, é crucial entender que os instantâneos não substituem a necessidade de backups regulares. Você não pode fazer backup ou restaurar instantâneos de banco de dados, o que significa que eles devem ser usados com uma estratégia de backup robusta para garantir a proteção e a recuperação de dados se houver perda de dados ou corrupção.

Instantâneos de banco de dados são criados com a sintaxe T-SQL CREATE DATABASE, usando a sintaxe AS SNAPSHOT OF.

Vários instantâneos podem existir em um banco de dados de origem. Cada instantâneo de banco de dados persiste até que o proprietário do banco de dados o derrube explicitamente.

Observação

Os instantâneos de banco de dados não estão relacionados a backups de instantâneos, backups de instantâneos Transact-SQL, isolamento de instantâneo de transações ou replicação de instantâneo.

Visão geral do recurso

Os instantâneos de banco de dados operam 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. O instantâneo armazena a página original, preservando os registros de dados da forma como existiam quando o instantâneo foi criado. O mesmo processo é repetido para cada página que está sendo modificada pela primeira vez. Para o usuário, um instantâneo de banco de dados parece nunca ser alterado porque as operações de leitura em um instantâneo de banco de dados sempre acessam as páginas de dados originais, independentemente de onde residem.

O instantâneo armazena as páginas originais copiadas utilizando um ou mais arquivos esparsos. Inicialmente, um arquivo esparso é um arquivo vazio que não contém dados do usuário e ainda não foi alocado espaço em disco para dados do usuário. O tamanho do arquivo aumenta à medida que mais páginas são atualizadas no banco de dados de origem. 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.

Diagrama mostrando padrões de atualização alternativos e tamanho da captura instantânea.

Benefícios

  • Os instantâneos podem ser utilizados para fins de geração de relatórios.

    • Os clientes podem consultar um instantâneo de banco de dados, o que ajuda a gravar relatórios com base nos dados quando o instantâneo é criado.
  • Manutenção de dados históricos para geração de relatórios.

    • Um instantâneo pode estender o acesso a dados do usuário em um momento determinado. Por exemplo, você pode criar um instantâneo de banco de dados para relatórios posteriores no final de um determinado período (como um trimestre financeiro). Você pode executar relatórios de fim de período no instantâneo. Se o espaço em disco permitir, você também poderá manter indefinidamente instantâneos de fim de período, permitindo que consultas em relação aos resultados desses períodos, por exemplo, investiguem o desempenho organizacional.
  • Use um banco de dados espelho que você mantém para fins de disponibilidade para descarregar relatórios.

  • Protegendo dados de erros administrativos.

  • Se ocorrer um erro de usuário em um banco de dados de origem, você poderá revertê-lo ao estado em que estava quando um instantâneo do banco de dados foi criado. A perda de dados é limitada às atualizações no banco de dados desde a criação do instantâneo.

    • Por exemplo, antes de fazer atualizações importantes, como uma atualização em massa ou uma alteração de esquema, crie um instantâneo de banco de dados no banco de dados para proteger os dados. Se cometer um erro, você poderá usar o instantâneo para recuperar o banco de dados ao revertê-lo para o instantâneo. Reverter é mais rápido do que restaurar de um backup; no entanto, você não pode efetuar roll forward depois.

      Importante

      A reversão não funciona em um banco de dados offline ou corrompido. Portanto, backups regulares e teste de seu plano de restauração são necessários para proteger um banco de dados.

      Observação

      Os instantâneos do banco de dados são dependentes do banco de dados de origem. Portanto, o uso de instantâneos para reverter um banco de dados não substitui sua estratégia de backup e restauração. A execução de todos os backups agendados continua essencial. Se você precisar restaurar o banco de dados de origem para o ponto em que criou um instantâneo de banco de dados, implemente uma política de backup que permita que você faça isso.

  • Protegendo dados de erros do usuário.

  • Ao criar regularmente instantâneos do banco de dados, você pode reduzir o impacto de um erro maior do usuário, como uma tabela descartada. Para um alto nível de proteção, você pode criar uma série de instantâneos do banco de dados que abrangem tempo suficiente para reconhecer e responder à maioria dos erros de usuário. Por exemplo, dependendo dos seus recursos de disco, você pode manter de 6 a 12 instantâneos rotativos que abrangem um intervalo de 24 horas. Portanto, sempre que um novo instantâneo é criado, o mais antigo pode ser excluído.

    • Para se recuperar de um erro de usuário, você pode reverter imediatamente o banco de dados ao instantâneo antes do erro. A reversão é potencialmente muito mais rápida do que restaurar a partir de um backup; no entanto, você não pode continuar depois.

    • Como alternativa, você pode reconstruir manualmente uma tabela descartada ou outros dados perdidos a partir das informações em uma imagem. Por exemplo, você pode copiar em lote os dados do instantâneo para o banco de dados e mesclar manualmente os dados de volta ao banco de dados.

      Observação

      Seus motivos para usar instantâneos do banco de dados determinam quantos instantâneos simultâneos são necessários em um banco de dados, com que frequência um instantâneo deve ser criado e por quanto tempo deve ser mantido.

  • Gerenciando um banco de dados de teste.

    • Em um ambiente de teste, pode ser útil para o banco de dados conter dados idênticos no início de cada rodada de teste ao executar repetidamente um protocolo de teste. Antes de executar a primeira rodada, um desenvolvedor ou testador de aplicativos pode criar um instantâneo do banco de dados de teste. Depois de cada execução do teste, o banco de dados poderá retornar rapidamente ao seu estado anterior por meio da reversão do instantâneo do banco de dados.

Termos e definições

Os instantâneos de banco de dados no SQL Server envolvem vários termos e definições importantes. Um instantâneo de banco de dados é uma exibição estática e somente leitura de um banco de dados (conhecido como banco de dados de origem) em um momento específico. O banco de dados de origem é o banco de dados original no qual o instantâneo se baseia e deve permanecer online e acessível para que o instantâneo seja utilizável. Arquivos esparsos armazenam as páginas originais do banco de dados de origem que foram modificadas desde a criação do instantâneo. Esses arquivos estão inicialmente vazios e crescem conforme as alterações ocorrem no banco de dados de origem. Entender esses termos é essencial para gerenciar e utilizar efetivamente instantâneos de banco de dados no SQL Server.

Instantâneo do banco de dados

Uma exibição estática somente leitura transacionalmente consistente de um banco de dados (o banco de dados de origem).

Banco de dados de origem

No caso de um instantâneo de banco de dados, é o banco de dados no qual o instantâneo foi criado. 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 esse banco de dados ficar indisponível por qualquer motivo, seus instantâneos ficarão indisponíveis.

Arquivos esparsos

O sistema de arquivos NTFS fornece um arquivo que requer muito menos espaço em disco do que seria necessário de outra forma. Um arquivo esparso é usado para armazenar páginas copiadas para um instantâneo de banco de dados. Quando criado, um arquivo esparso ocupa pouco espaço em disco. Conforme os dados são gravados em um instantâneo de banco de dados, o NTFS aloca gradualmente espaço em disco no arquivo esparso correspondente.

Pré-requisitos

O banco de dados de origem, que pode usar qualquer modelo de recuperação, deve atender aos seguintes pré-requisitos:

  • A instância do servidor deve ser executada em uma edição do SQL Server que dê suporte a instantâneos de banco de dados.

  • O banco de dados de origem deve estar online, a menos que seja um banco de dados espelho dentro de uma sessão de espelhamento de banco de dados.

  • Você pode criar um instantâneo de banco de dados em um grupo de disponibilidade em qualquer banco de dados primário ou secundário. A função de réplica deve ser PRIMARY ou SECONDARY, em vez de estar no estado RESOLVING.

  • É recomendável que o estado de sincronização de banco de dados seja SYNCHRONIZING ou SYNCHRONIZED quando você criar um instantâneo de banco de dados. Porém, instantâneos de banco de dados podem ser criados quando o estado é NOT SYNCHRONIZING.

  • Para criar um instantâneo do banco de dados em um banco de dados espelho, o banco de dados precisa estar no estado de espelhamento SYNCHRONIZED.

  • O banco de dados de origem não pode ser configurado como um banco de dados compartilhado escalonável.

  • Antes do SQL Server 2019, o banco de dados de origem não podia conter um grupo de arquivos MEMORY_OPTIMIZED_DATA. O suporte para instantâneos do banco de dados em memória foi adicionado no SQL Server 2019.

  • Todo modelo de recuperação oferece suporte a instantâneos do banco de dados.

Limitações do banco de dados de origem

Se houver um instantâneo do banco de dados, as seguintes limitações existirão no banco de dados de origem do instantâneo:

  • O banco de dados não pode ser removido, desanexado ou restaurado.

  • O backup do banco de dados de origem geralmente funciona, mas não é afetado por instantâneos de banco de dados.

  • O desempenho é reduzido devido ao aumento das operações de E/S no banco de dados de origem devido a uma operação de cópia ao gravar para o instantâneo sempre que uma página é atualizada.

  • Os arquivos não podem ser eliminados do banco de dados de origem ou de instantâneos.

Limitações de instantâneos de banco de dados

Os instantâneos do banco de dados dependem do banco de dados de origem e não protegem contra erros de disco ou corrupção. Portanto, embora possam ser úteis para fins de relatório ou durante alterações de esquema, elas devem complementar, não substituir, práticas regulares de backup. Se você precisar restaurar o banco de dados de origem para o ponto em que criou um instantâneo de banco de dados, implemente uma política de backup que permita que você faça isso.

As limitações a seguir aplicam-se a instantâneos do banco de dados:

  • É preciso criar um instantâneo do banco de dados, a ser mantido na mesma instância de servidor, como banco de dados de origem.

  • Instantâneos do banco de dados sempre funcionam em todo o banco de dados.

  • Os instantâneos do banco de dados dependem do banco de dados de origem e não são um armazenamento redundante. Eles não protegem contra erros de disco ou outros tipos de corrupção. Portanto, usar instantâneos para reverter um banco de dados não substitui sua estratégia de backup e restauração. A execução de todos os backups agendados continua essencial. Se você precisar restaurar o banco de dados de origem para o ponto em que criou um instantâneo de banco de dados, implemente uma política de backup que permita que você faça isso.

Quando uma página que está sendo atualizada no banco de dados de origem é transferida para um instantâneo, caso o instantâneo fique sem espaço de armazenamento ou encontre qualquer outro erro, ele se torna suspeito e precisa ser excluído.

  • Os instantâneos são somente leitura. Como eles são somente leitura, não podem ser atualizados. Não se espera que os instantâneos de banco de dados sejam utilizáveis após uma atualização.

  • Instantâneos dos bancos de dados model, master e tempdb são proibidos.

  • Você não pode alterar nenhuma das especificações dos arquivos de instantâneo do banco de dados.

  • Você não pode remover arquivos de um instantâneo de banco de dados.

  • Você não pode fazer backup nem restaurar instantâneos de banco de dados.

  • Você não pode anexar ou desanexar instantâneos de banco de dados.

  • Você não pode criar instantâneos de banco de dados no sistema de arquivos FAT32 ou em partições RAW. O sistema de arquivos NTFS fornece os arquivos esparsos usados por instantâneos de banco de dados.

  • Não há suporte para indexação de texto completo em instantâneos de banco de dados. Catálogos de texto completo não são propagados do banco de dados de origem.

  • Um instantâneo do banco de dados herda as restrições de segurança de seu banco de dados de origem no momento da criação do instantâneo. Como os instantâneos são somente leitura, as permissões herdadas não podem ser alteradas e as alterações de permissão feitas na origem não serão refletidas nos instantâneos existentes.

  • Um instantâneo sempre reflete o estado dos grupos de arquivos no momento de sua criação: grupos de arquivos online permanecem online e grupos de arquivos offline permanecem offline. Para obter mais informações, confira "Instantâneos de banco de dados com grupos de arquivos offline" mais adiante neste artigo.

  • Se um banco de dados de origem se tornar RECOVERY_PENDING, seus instantâneos poderão se tornar inacessíveis. No entanto, depois que o problema no banco de dados de origem for resolvido, seus instantâneos deverão ficar disponíveis novamente.

  • A reversão não tem suporte para qualquer NTFS somente leitura ou os arquivos compactados NTFS no banco de dados. As tentativas de reverter um banco de dados que contém qualquer um desses tipos de grupos de arquivos falham.

  • Em uma configuração de envio de logs, os instantâneos de banco de dados só podem ser criados no banco de dados primário, não em um secundário. Suponha que você alterne funções entre as instâncias de servidor primário e secundário. Nesse caso, você deve remover todos os instantâneos do banco de dados antes de configurar o banco de dados primário como secundário.

  • Um instantâneo de banco de dados não pode ser configurado como um banco de dados compartilhado escalonável.

Instantâneos de banco de dados não dão suporte a grupos de arquivos FILESTREAM. Se houver grupos de arquivos FILESTREAM em um banco de dados de origem, eles serão marcados como offline em seus instantâneos de banco de dados e os instantâneos não poderão ser usados para reverter o banco de dados.

Observação

Uma instrução SELECT executada em um instantâneo de banco de dados não deve especificar uma coluna FILESTREAM. Caso contrário, a mensagem de erro a seguir será retornada: Could not continue scan with NOLOCK due to data movement.

  • Quando estatísticas em um instantâneo somente leitura estão ausentes ou obsoletas, o Mecanismo de Banco de Dados cria e mantém estatísticas temporárias em tempdb. Consulte Estatísticas para obter mais informações.

Espaço em disco

Os instantâneos do banco de dados consomem espaço em disco. Se um instantâneo de banco de dados ficar sem espaço em disco, ele será marcado como suspeito e deverá ser descartado. (O banco de dados de origem, no entanto, não é afetado; as ações nele continuam normalmente.)

No entanto, os instantâneos são altamente eficientes espacialmente em comparação com uma cópia completa de um banco de dados. Um instantâneo requer apenas armazenamento suficiente para as páginas alteradas no decorrer de seu tempo de vida. Em geral, os instantâneos são mantidos por um tempo limitado, portanto, seu tamanho não é uma preocupação significativa.

Porém, quanto mais tempo você mantiver um instantâneo, maior a probabilidade de que ele ocupe o espaço disponível. O tamanho máximo para o qual um arquivo esparso pode crescer é o tamanho do arquivo de banco de dados de origem correspondente no momento da criação do instantâneo. Um instantâneo de banco de dados deve ser excluído (descartado) se ficar sem espaço em disco.

Observação

Com exceção do espaço em arquivo, o instantâneo do banco de dados consome basicamente tanto recurso quanto o banco de dados.

Grupos de arquivos offline

Os grupos de arquivos offline no banco de dados de origem afetam os instantâneos do banco de dados quando se tenta realizar o seguinte:

  • Crie um instantâneo.

    • Quando um banco de dados de origem possui um ou mais grupos de arquivos offline, a criação do instantâneo terá êxito nos grupos de arquivos offline. Os arquivos esparsos não são criados para os grupos de arquivos offline.
  • Pegar um grupo de arquivos offline

    • Você pode pegar um arquivo offline no banco de dados de origem. No entanto, o grupo de arquivos permanece online nos instantâneos do banco de dados se estava online no momento da criação do instantâneo. Se os dados consultados forem alterados desde a criação do instantâneo, a página de dados original estará acessível no instantâneo. Porém, as consultas que usam o instantâneo para acessar os dados não modificados no grupo de arquivos talvez falhem e apresentem erros de E/S (entrada/saída).
  • Colocar um grupo de arquivos online

    • Você não pode levar um grupo de arquivos online para um banco de dados que tenha instantâneos de banco de dados. Se um grupo de arquivos estiver offline no momento da criação do instantâneo ou for colocado offline enquanto um instantâneo de banco de dados existir, ele permanecerá offline. O motivo é que deixar um arquivo online novamente envolve restaurá-lo, o que não será possível se um instantâneo de banco de dados existir no mesmo banco de dados.
  • Reverter o banco de dados de origem a um instantâneo

    • Reverter um banco de dados de origem para um instantâneo de banco de dados requer que todos os grupos de arquivos estejam online, exceto aqueles que estavam offline quando o instantâneo foi criado.