instantâneo de banco de dados é a criação de uma imagem imutável do banco de dados, você pode pensar nisso como tirar uma foto atual do banco de dados.
se eu explicar por meio de um exemplo, será mais claro.
por exemplo, tiramos o instantâneo do banco de dados AdventureWorks2014. Estamos lendo esse instantâneo. Ainda não foram feitas alterações no banco de dados AdventureWorks2014. Nossas seleções vão para o banco de dados original porque não há alteração no banco de dados original.
se ocorrerem alterações no banco de dados original, essas alterações serão gravadas em um espaço dedicado no disco para Snapshot (chamados de arquivos esparsos).
quando queremos ler os dados, se os dados foram alterados no banco de dados original, a versão inalterada dos dados é lida a partir do arquivo esparso. Dessa forma, a foto fica intacta.
mesmo que não ocupe espaço em disco assim que obtivermos um instantâneo, o tamanho dos arquivos esparsos aumentará à medida que as alterações no banco de dados original aumentarem. Se o tamanho dos arquivos esparsos crescer e não houver espaço no disco, o instantâneo se tornará suspeito e você deverá excluir o instantâneo.
é usado principalmente com tecnologia de espelhamento.
sugiro que você leia meu artigo “espelhamento de banco de dados no SQL Server”. No espelhamento, não podemos ler a partir do banco de dados secundário. Quando queremos ler a partir do banco de dados secundário, podemos fazer isso por instantâneo do banco de dados secundário.
e desta forma, não criamos um fardo para o relatório no banco de dados primário, fazendo nossas consultas de relatório do banco de dados secundário.
ou você pode obter o instantâneo do banco de dados antes de executar uma atualização em lote ou excluir a operação. Uma operação incorreta de atualização ou exclusão pode ser revertida usando snapshot. Seria um método muito mais rápido do que retornar do Backup.
Snapshot deve estar na mesma instância com o banco de dados.
vamos continuar com dois exemplos.
no primeiro exemplo, obteremos um instantâneo para poder ler a partir do banco de dados secundário do banco de dados espelhado.
no segundo exemplo, obteremos snapshot para reverter uma operação de atualização incorreta.
Example1:
primeiro, o banco de dados espelhado deve ser síncrono. Portanto, a imagem do seu banco de dados secundário deve ser a seguinte.
em seguida, criamos o instantâneo com a ajuda do script a seguir. Você deve especificar todos os arquivos no banco de dados.
em nosso exemplo, havia dois arquivos. Criamos snapshot para esses dois arquivos. Se você não estiver familiarizado com FileGroup e arquivo, você pode ler meu artigo “Como criar um banco de dados no SQL Server”.
1
2
3
4
5
|
CRIAR BANCO de dados AdventureWorks2014_Snapshot EM
( NOME = AdventureWorks2012_Data, FILENAME = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( nome = AdventureWorks2014_Deneme, nome do arquivo = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
COMO INSTANTÂNEO DE AdventureWorks2014;
IR
|
eu tenho o seguinte script do msdn.
com o seguinte script, você pode encontrar o tamanho do instantâneo no disco e o tamanho máximo que ele pode crescer.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
SELECIONE DB_NAME(sd.source_database_id) COMO ,
sd.nome ,
mf.nome ,
size_on_disk_bytes/1024 COMO ,
mf2.tamanho / 128 como
do sistema.master_files mf
Junte-se ao sys.bancos de dados sd
no mf.database_id = sd . database_id
Junte-se ao sys.master_files mf2
em sd.source_database_id = mf2.database_id
E mf.file_id = mf2.file_id
CROSS APPLY sys.dm_io_virtual_file_stats (sd. database_id, mf.file_id)
ONDE mf.is_sparse = 1
E mf2.is_sparse = 0
ORDER BY 1;
|
O seguinte conjunto de resultados retornado quando eu executei o script. Eu defino o tamanho desses dois arquivos de dados para 256 mb.
é por isso que o instantâneo pode crescer até um máximo de 256 MB.
criamos nosso instantâneo.
você pode ler de seu instantâneo como se fosse um banco de dados dos bancos de dados-> seção Snapshots de banco de dados no SSMS.
normalmente, você não pode ler do banco de dados secundário no espelhamento. Mas você pode ler a partir do instantâneo do banco de dados secundário.
Example2:
vamos executar o script abaixo no banco de dados principal.
1
2
3
4
5
|
CRIAR BANCO de dados AdventureWorks2014_Snapshot EM
( NOME = AdventureWorks2012_Data, FILENAME = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( nome = AdventureWorks2014_Deneme, nome do arquivo = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
como instantâneo de AdventureWorks2014;
IR
|
Depois de tirar foto, eliminar qualquer registo de qualquer tabela com a ajuda do script a seguir. Estou excluindo registros da tabela chamada Snapshot_deneme que criei anteriormente no banco de dados AdventureWorks2014.
1
|
Excluir Do Snapshot_deneme
|
Após o processo de exclusão, você pode restaurar seus registos eliminados com a ajuda do script a seguir.
mas se você tiver feito outra operação depois de tirar um instantâneo, perderá essas alterações.
1
2
3
|
USE master
IR p
RESTAURAR BANCO de dados AdventureWorks2014 DE DATABASE_SNAPSHOT = ‘AdventureWorks2014_Snapshot’
|
Autor: dbtut
somos uma equipe com mais de 10 anos de gerenciamento de banco de dados e BI experiência. Nossos Expertises: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.