Instantâneos de banco de dados (SQL Server)
Aplica-se a:SQL Server
Um instantâneo de uma base de dados é uma visualização estática e somente leitura de uma base de dados do SQL Server (a base de dados de origem). É consistente em termos de transações com o banco de dados de origem desde a criação do instantâneo e sempre reside na mesma instância do servidor que o banco de dados de origem. Embora os instantâneos de banco de dados forneçam uma exibição somente leitura dos dados no mesmo estado de quando o instantâneo foi criado, o tamanho do arquivo de instantâneo aumenta à medida que 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 grandes 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. Não é possível 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 ou corrupção de dados.
Os instantâneos do banco de dados são criados com a sintaxe CREATE DATABASE T-SQL, utilizando a sintaxe AS SNAPSHOT OF
.
Vários instantâneos podem existir num determinado banco de dados de origem. Cada instantâneo do banco de dados persiste até que o proprietário do banco de dados o descarta explicitamente.
Observação
Os instantâneos de bases de dados não estão relacionados a backups de instantâneos, backups de instantâneos Transact-SQL, isolamento de instantâneos de transações ou replicação de instantâneos.
Visão geral dos recursos
As capturas instantâneas de base de dados operam ao nível da página de dados. Antes de uma página do banco de dados de origem ser modificada pela primeira vez, a página original é copiada do banco de dados de origem para o instantâneo. O snapshot armazena a página original, preservando os registros de dados como existiam quando o snapshot foi criado. O mesmo processo é repetido para cada página que é 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 elas residem.
O instantâneo armazena as páginas originais copiadas usando 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 os 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 ilustra 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 no qual apenas 30% das páginas originais são atualizadas durante a vida útil do instantâneo. O padrão de atualização B reflete um ambiente no qual 80% das páginas originais são atualizadas durante a duração do instantâneo.
Benefícios
Os snapshots podem ser usados para fins de relatório.
- Os clientes podem consultar um instantâneo do banco de dados, que ajuda a escrever 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 do utilizador aos dados de um determinado momento no tempo. Por exemplo, você pode criar um instantâneo do banco de dados para relatórios posteriores no final de um determinado período (como um trimestre financeiro). Em seguida, 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 instantâneos de fim de período indefinidamente, permitindo consultas em relação aos resultados desses períodos, por exemplo, para investigar o desempenho organizacional.
Usando um banco de dados espelho que você mantém para fins de disponibilidade para descarregar relatórios.
- O uso de instantâneos de banco de dados com espelhamento de banco de dados permite tornar os dados no servidor espelho acessíveis para a geração de relatórios. Além disso, a execução de consultas no banco de dados espelho pode liberar recursos para o banco de dados principal. Para obter mais informações, consulte Espelhamento de Banco de Dados e Instantâneos de Banco de Dados (SQL Server).
Salvaguarda dos dados contra erros administrativos.
Se ocorrer um erro de usuário em um banco de dados de origem, você poderá revertê-lo para seu estado quando um instantâneo do banco de dados for criado. A perda de dados é limitada a atualizações no banco de dados desde a criação do snapshot.
Por exemplo, antes de fazer atualizações importantes, como uma atualização em massa ou uma alteração de esquema, crie um instantâneo do banco de dados no banco de dados para proteger os dados. Se você cometer um erro, poderá usar o snapshot para recuperar revertendo o banco de dados para o snapshot. A reversão é mais rápida do que a restauração a partir de um backup; no entanto, não se pode prosseguir depois.
Importante
A reversão não funciona em um banco de dados offline ou corrompido. Portanto, backups regulares e testes 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 dependem 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. Executar todos os seus backups agendados continua sendo essencial. Se você precisar restaurar o banco de dados de origem até o ponto em que criou um instantâneo do banco de dados, implemente uma política de backup que permita fazer isso.
Salvaguardar os dados contra erros do utilizador.
Ao criar instantâneos de banco de dados regularmente, você pode atenuar o impacto de um erro importante do usuário, como uma tabela descartada. Para obter um alto nível de proteção, você pode criar uma série de instantâneos de banco de dados com tempo suficiente para reconhecer e responder à maioria dos erros do usuário. Por exemplo, dependendo dos recursos do disco, você pode manter de 6 a 12 snapshots contínuos em um intervalo de 24 horas. Em seguida, cada vez que um novo snapshot é criado, o snapshot mais antigo pode ser excluído.
Para recuperar de um erro do utilizador, pode reverter o banco de dados para o estado imediatamente anterior ao erro. A reversão é potencialmente muito mais rápida do que a restauração a partir de um backup; no entanto, não se pode avançar depois.
Como alternativa, você pode reconstruir manualmente uma tabela descartada ou outros dados perdidos a partir das informações em um instantâneo. Por exemplo, poderá copiar em massa os dados do instantâneo para o banco de dados e mesclar manualmente os dados de volta para o banco de dados.
Observação
Seus motivos para usar instantâneos de banco de dados determinam quantos instantâneos simultâneos você precisa em um banco de dados, com que frequência criar um novo instantâneo e por quanto tempo mantê-lo.
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. Ao reverter o instantâneo do banco de dados, após cada execução de teste, o banco de dados pode ser rapidamente retornado ao seu estado anterior.
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 visualização estática somente leitura de um banco de dados (referido como o banco de dados de origem ) em um ponto específico no tempo. O banco de dados de origem é o banco de dados original no qual o snapshot se baseia e deve permanecer online e acessível para que o snapshot possa ser utilizado. Arquivos esparsos armazenam as páginas originais do banco de dados de origem que foram modificadas desde que o instantâneo foi criado. Esses arquivos são inicialmente vazios e crescem à medida que ocorrem alterações no banco de dados de origem. Compreender esses termos é essencial para gerenciar e utilizar efetivamente instantâneos de banco de dados no SQL Server.
Instantâneo do banco de dados
Uma visão estática, consistente em termos transacionais e de apenas leitura de um banco de dados (o banco de dados de origem).
Base de dados de origem
Para 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 dependem do banco de dados de origem. Os instantâneos de um banco de dados devem estar na mesma instância do 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.
Arquivo esparso
O sistema de arquivos NTFS fornece um arquivo que requer muito menos espaço em disco do que seria necessário. Um arquivo esparso é usado para armazenar páginas copiadas para um instantâneo de banco de dados. Quando criado pela primeira vez, um arquivo esparso ocupa pouco espaço em disco. À medida que os dados são gravados em um instantâneo do banco de dados, o NTFS aloca espaço em disco gradualmente para o 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 ofereça suporte a instantâneos de banco de dados.
- Para mais informações, consulte Funcionalidades Suportadas pelas Edições do SQL Server 2016.
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 PRIMÁRIA ou SECUNDÁRIA, não no estado RESOLVENDO.
Recomendamos que o estado de sincronização do banco de dados seja SINCRONIZANDO ou SINCRONIZADO quando você cria um instantâneo do banco de dados. No entanto, instantâneos de banco de dados podem ser criados quando o estado NÃO está sincronizando.
- Para obter mais informações, consulte instantâneos de banco de dados com grupos de disponibilidade Always On (SQL Server).
Para criar um instantâneo de banco de dados em um banco de dados espelho, o banco de dados deve estar no estado de espelhamento SINCRONIZADO.
O banco de dados de origem não pode ser configurado como um banco de dados compartilhado escalável.
Antes do SQL Server 2019, o banco de dados de origem não podia conter um MEMORY_OPTIMIZED_DATA grupo de arquivos. O suporte para instantâneos de banco de dados na memória foi adicionado no SQL Server 2019.
Todos os modelos de recuperação suportam instantâneos de banco de dados.
Limitações no banco de dados de origem
Enquanto existir um instantâneo de banco de dados, as seguintes limitações existem no banco de dados de origem do instantâneo:
O banco de dados não pode ser descartado, desanexado ou restaurado.
Fazer o backup do banco de dados de origem geralmente funciona, mas o processo não é afetado por instantâneos do banco de dados.
O desempenho é reduzido devido ao aumento do I/O no banco de dados de origem, resultante de uma operação de cópia em gravação para o instantâneo sempre que uma página é atualizada.
Os arquivos não podem ser removidos do banco de dados de origem ou de qualquer instantâneo.
Limitações em 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 ou corrupção de disco. Portanto, embora possam ser úteis para fins de relatório ou durante alterações de esquema, eles devem complementar, e não substituir, as práticas regulares de backup. Se você precisar restaurar o banco de dados de origem até o ponto em que criou um instantâneo do banco de dados, implemente uma política de backup que permita fazer isso.
As seguintes limitações se aplicam aos instantâneos do banco de dados:
Um instantâneo do banco de dados deve ser criado e permanecer na mesma instância do servidor que o banco de dados de origem.
Os instantâneos do banco de dados sempre funcionam em um banco de dados inteiro.
Os instantâneos do banco de dados dependem do banco de dados de origem e não são armazenamento redundante. Eles não protegem contra erros de disco ou outros tipos de corrupção. Portanto, o uso de instantâneos para reverter um banco de dados não substitui sua estratégia de backup e restauração. Executar todos os seus backups agendados continua sendo essencial. Se você precisar restaurar o banco de dados de origem até o ponto em que criou um instantâneo do banco de dados, implemente uma política de backup que permita fazer isso.
Quando uma página que está sendo atualizada no banco de dados de origem é enviada por push para um instantâneo, se o instantâneo ficar sem espaço em disco ou encontrar algum outro erro, ele se tornará suspeito e deverá ser excluído.
Os instantâneos são somente leitura. Como são somente leitura, não podem ser atualizados. Portanto, não se espera que os instantâneos do banco de dados sejam viáveis após uma atualização.
Capturas dos bancos de dados
model
,master
etempdb
estão proibidas.Não é possível alterar nenhuma das especificações dos arquivos de instantâneo do banco de dados.
Não é possível remover arquivos de um instantâneo do banco de dados.
Não é possível fazer backup ou restaurar instantâneos de banco de dados.
Não é possível anexar ou desanexar instantâneos de banco de dados.
Não é possível criar instantâneos de banco de dados no sistema de arquivos FAT32 ou partições RAW. O sistema de arquivos NTFS fornece os arquivos esparsos usados pelos instantâneos do banco de dados.
A indexação de texto completo não é suportada em instantâneos de banco de dados. Os catálogos de texto completo não são propagados a partir do banco de dados de origem.
Um instantâneo de 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 da criação do instantâneo: os grupos de arquivos online permanecem online e os grupos de arquivos offline permanecem offline. Para obter mais informações, consulte "Instantâneos de banco de dados com grupos de arquivos offline" mais à frente neste artigo.
Se um banco de dados de origem se tornar RECOVERY_PENDING, seus instantâneos poderão ficar 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 é suportada para ficheiros NTFS em modo só de leitura ou ficheiros NTFS comprimidos na base 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 do banco de dados podem ser criados somente no banco de dados primário, não no banco de dados secundário. Suponha que você alterne funções entre as instâncias do servidor primário e secundário. Nesse caso, deve-se descartar 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 escalável.
Os instantâneos de banco de dados não suportam grupos de arquivos FILESTREAM. Se os grupos de arquivos FILESTREAM existirem 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 seguinte mensagem de erro será retornada: Could not continue scan with NOLOCK due to data movement.
- Quando as 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 no
tempdb
. Consulte Statistics 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 do 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 snapshots são altamente eficientes em termos de espaço em comparação com uma cópia completa de um banco de dados. Um instantâneo requer apenas armazenamento suficiente para as páginas que mudam durante o seu tempo de vida. Geralmente, os snapshots são mantidos por um tempo limitado, portanto, seu tamanho não é uma preocupação significativa.
No entanto, quanto mais tempo você mantiver um instantâneo, maior a probabilidade de ele usar o espaço disponível. O tamanho máximo para o qual um arquivo esparso pode crescer é o tamanho correspondente do arquivo de banco de dados de origem no momento da criação do instantâneo. Um instantâneo do banco de dados deve ser excluído (descartado) se ficar sem espaço em disco.
Observação
Com exceção do espaço de arquivo, um instantâneo de banco de dados consome aproximadamente tantos recursos quanto um 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 você tenta fazer qualquer um dos seguintes:
Crie um instantâneo.
- Quando um banco de dados de origem tem um ou mais grupos de arquivos offline, a criação de instantâneos é bem-sucedida com os grupos de arquivos offline. Os ficheiros esparsos não são criados para os grupos de ficheiros offline.
Colocar um grupo de ficheiros offline
- Você pode colocar um arquivo offline no banco de dados de origem. No entanto, o grupo de arquivos permanece online nos instantâneos de banco de dados se estava online quando os instantâneos foram criados. Se os dados consultados tiverem sido alterados desde a criação do instantâneo, a página de dados original estará acessível no instantâneo. No entanto, as consultas que usam o instantâneo para acessar dados não modificados no grupo de arquivos provavelmente falharão com erros de entrada/saída (E/S).
Colocar um grupo de arquivos online
- Não é possível colocar um grupo de arquivos online em 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 existir um instantâneo de banco de dados, ele permanecerá offline. Isso ocorre porque colocar um arquivo online novamente envolve restaurá-lo, o que não é possível se existir um instantâneo do banco de dados no banco de dados.
Reverter a base de dados de origem ao 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.
Conteúdo relacionado
- Espelhamento de Banco de Dados e Instantâneos de Banco de Dados (SQL Server)
- CREATE DATABASE - Capturas de banco de dados
- Criar um instantâneo de banco de dados (Transact-SQL)
- Exibir um instantâneo de banco de dados (SQL Server)
- exibir o tamanho do arquivo esparso de um instantâneo de banco de dados (Transact-SQL)
- Reverter um Banco de Dados para um Instantâneo de Banco de Dados
- Eliminar um Instantâneo do Banco de Dados (Transact-SQL)