Tenho lido artigo após artigo sobre a diferença entre um backup de banco de dados e um instantâneo e eles simplesmente não fazem sentido, então, por favor, ajude-me a entender
"Um instantâneo é uma imagem do seu sistema/volume em um momento específico ."
"Um backup é uma cópia de todo o seu sistema/volume no momento em que o backup foi realizado ."
- Tudo é feito em um determinado momento. É assim que a física funciona. A menos que você viva em um buraco negro onde o tempo não existe ou algo assim. Essa frase simplesmente não faz sentido para mim. O backup é feito no momento em que foi feito. Sim. Dã. O que isso significa?
- Não tenho ideia do que deveria ser uma "imagem" de um banco de dados. Essa analogia não significa nada para mim. Eles significam apenas uma "cópia"? Um backup também é uma cópia do seu banco de dados. Então, novamente, ambos são iguais para mim.
"Um snapshot mantém apenas as alterações do seu banco de dados desde o último snapshot"
- Mas nunca fiz um instantâneo ainda. Este será o primeiro. Então, qual será o instantâneo? Não há alterações desde o último instantâneo, pois não há último instantâneo. Será apenas... exatamente a mesma coisa que um backup?
"Um instantâneo é rápido de fazer e tem um tamanho pequeno"
- Novamente, este é meu primeiro instantâneo. Como será magicamente mais rápido e menor que um backup? Ou isso é apenas uma mentira?
Editar: Fontes: (Todos os principais resultados do Google de Backup vs Snapshot)
https://phoenixnap.com/kb/snapshot-vs-backup
Um instantâneo é uma imagem do seu sistema/volume em um momento específico.
Um backup é uma cópia de todo o seu sistema/volume no momento em que o backup foi executado.
https://www.sqlshack.com/understanding-database-snapshots-vs-database-backups-in-sql-server/
Os snapshots do banco de dados são como uma visualização de um banco de dados como ele era em um determinado momento.
Outro uso para backups de instantâneos é que vários instantâneos podem ser criados para um banco de dados e podem ser obtidos em diferentes momentos.
Os backups podem ser criados a qualquer momento. Um snapshot é uma cópia “point-in-time” de um banco de dados.
Os instantâneos são pequenos e podem ser feitos de forma rápida e fácil, sem causar muito efeito no servidor.
Você deve ser muito específico sobre a terminologia usada.
Backups de banco de dados SQL Server
Referência: visão geral do backup (SQL Server) (Microsoft Learn | SQL)
Instantâneos do banco de dados SQL Server
Referência: snapshots de banco de dados (SQL Server) (Microsoft Learn | SQL)
Instantâneos do Windows
Os instantâneos do Windows executados com a ajuda do Volume Shadow Copy Service (VSS) e do SQL Writer são, na verdade, instantâneos das unidades de disco (HDD/SSD/...) em um determinado momento.
Referência: Aplicativos de Backup do SQL Server – Serviço de Cópia de Sombra de Volume (VSS) e SQL Writer (Microsoft Learn | SQL)
Há uma bela imagem fornecida na documentação que mostra o que acontece durante um instantâneo do Windows que executará um instantâneo do banco de dados:
Respondendo as suas perguntas)
Um instantâneo do banco de dados SQL Server criará uma cópia somente leitura de um banco de dados existente, conforme explicado no trecho acima.
Um instantâneo do Windows Server permitirá que você reverta todo o sistema (sistemas operacionais e bancos de dados do SQL Server) para um momento exato, quando o instantâneo foi criado.
Os links na sua pergunta sobre instantâneos estão relacionados a duas tecnologias diferentes: Instantâneos de banco de dados (consulte 2.) e Instantâneos do Windows Server (consulte 3.).
É por isso que você pode estar confuso.
Backups regulares de banco de dados podem ser configurados para serem agendados recorrentemente com uma estratégia específica, de modo que você possa restaurar seu banco de dados para qualquer um dos vários momentos no passado. É uma configuração única que permite que os backups continuem a ocorrer como se houvesse pontos de restauração constantes.
O palavreado que você cita é um pouco o oposto disso e afirma que esses tipos de backups são apenas uma vez a partir daquele único momento.
Sim. Esta é uma terminologia comum na área de infraestrutura em relação a backups.
Sim, ambas são duas maneiras diferentes de fazer algum tipo de cópia. Novamente, ter a(s) fonte(s) do palavreado citado pode ser útil para explicarmos melhor suas diferenças.
^ Acho que você abandonou isso.
Veja minha última frase do item 2.
A razão pela qual isso é importante é porque os backups regulares do banco de dados não ocorrem no nível " sistema/volume ". Parece que você está lendo sobre diferentes tipos de backup além dos típicos no nível do banco de dados.
Só quero apontar algo para uso do instantâneo. Tanto o snapshot quanto o backup permitirão recuperar o banco de dados quando necessário, mas as formas como eles são armazenados e usados são bem diferentes.
Backup, quero dizer backup completo aqui, irá armazenar tudo que você selecionar e então você poderá mantê-lo em outros lugares. Ele recuperará o banco de dados independentemente de o banco de dados de origem existir ou não. Você pode até usar o arquivo .bak para criar um novo banco de dados.
O snapshot do SQL Server, que é um arquivo esparso, geralmente é muito menor que o backup porque não precisa armazenar tudo imediatamente. Na verdade, é apenas um arquivo para registrar o delta do banco de dados.
Ao recuperar o banco de dados com snapshot, tudo será revertido conforme os registros; ou seja, se o banco de dados de origem não puder ser encontrado por algum motivo, confiar apenas em um instantâneo não ajudará a recuperar os dados.
Mais uma coisa: o tamanho do backup geralmente é fixo, mas o tamanho do instantâneo aumentará porque mais e mais registros são armazenados, portanto, faça um bom plano de gerenciamento de instantâneos para isso.
Recomenda-se usar snapshot para cenários como atualização e teste de banco de dados e usar backup para recuperação de desastres real.
https://learn.microsoft.com/en-us/sql/relational-databases/databases/database-snapshots-sql-server?view=sql-server-ver16
Como isso pode dizer respeito a sistemas de arquivos, bancos de dados, sistemas de controle de versão e outras coisas, usarei apenas o termo "dados" para tudo o que você está fazendo backup ou capturando instantâneos e "sistema" para o banco de dados ou driver do sistema de arquivos.
“Backup” é o mais fácil de definir: é um conjunto de dados que contém tudo o que é necessário para restaurar os dados ao estado em que se encontravam quando o backup foi feito. Esperamos que o backup seja consistente , ou seja, restaurará os dados exatamente para o momento em que o backup foi feito. Se algumas alterações foram feitas nos dados durante o processo de backup, elas não deverão ser incluídas no backup, pois isso quebraria a consistência.
Por exemplo, compactar um diretório em um arquivo compactado não tem garantia de consistência: se alguns dos arquivos mudarem durante o processo, qual versão será incluída no zip depende de qualquer um. Pela mesma razão, backups de sistemas de arquivos feitos com ferramentas como rsync (entre outras) são melhores que nada, mas não há garantia de restauração para um estado consistente. Na verdade, se você estiver fazendo backup de um banco de dados ativo copiando os arquivos, é praticamente garantido que isso resultará em lixo.
"Snapshot" é a solução para o problema acima. O instantâneo não são dados que você pode ver diretamente, é um recurso oferecido por um banco de dados ou sistema de arquivos. Quando você pede para tirar um instantâneo, você obtém uma visão virtual dos dados, congelados no tempo, como estavam quando o instantâneo foi tirado. Ao contrário de um backup, que é um conjunto de arquivos que existem independentemente do aplicativo de onde vieram, um instantâneo existe apenas como estado interno no sistema. É basicamente um portal de viagem no tempo que permite que você veja seus dados como estavam quando o instantâneo foi tirado. Portanto, o instantâneo em si não pode ser copiado para outra máquina, porque não é um arquivo. Mas normalmente também chamamos de “instantâneo” os dados que você pode ler através deste portal do tempo e realmente copiar, então você poderia dizer que “copiou um instantâneo”, o que significa que você copiou os dados.
Normalmente você pode acessar seu snapshot da mesma maneira que acessa seus dados, para um sistema de arquivos o snapshot será apresentado como um sistema de arquivos somente leitura, para um banco de dados ele se parecerá com uma versão somente leitura do banco de dados ativo com consultas SQL , etc.
As implementações dependem do sistema, mas a ideia geral é que, quando ocorre uma gravação, os dados que seriam sobrescritos, mas que ainda podem ser vistos por qualquer instantâneo obtido no passado, não podem ser simplesmente sobrescritos. Em vez disso, o sistema precisa manter versões separadas das linhas modificadas e controlar qual instantâneo pode ver qual versão.
Todos os bancos de dados transacionais multiusuário devem fazer snapshots para funcionarem. Geralmente é chamado de "nível de isolamento da transação", que determina quando elas são feitas. Por exemplo, um instantâneo pode ser feito no início de cada consulta. Em seguida, a consulta é executada sem ver as modificações nas tabelas feitas durante a execução. Caso contrário, a consulta não teria uma visão consistente do banco de dados, as relações de chave estrangeira seriam quebradas, etc.
Agora, depois de ter seu instantâneo, você pode fazer várias coisas com ele:
Consulte
Role de volta
Você pode tirar um instantâneo e fazer algumas modificações. Se você não gostar do resultado, volte para o instantâneo.
Se você executar seu programa de backup normal em seu sistema de arquivos ou instantâneo de banco de dados, é garantido que os dados que ele vê não serão modificados durante o processo de cópia. Portanto, seu backup será consistente.
Por exemplo, se você fizer um instantâneo do ZFS e depois compactá-lo ou sincronizá-lo novamente em outra máquina, esse backup restaurará seus dados exatamente como estavam. Se os dados vierem de programas que gravam arquivos sem recuperação de falhas ou logs de transações (ou seja, MyISAM), eles ainda serão inutilizáveis, mas isso não é culpa do snapshot.
A maioria dos sistemas que permitem snapshots para fins de backup oferecerão uma maneira mais rápida de fazer esse backup do que copiar arquivos ou descarregar SQL. Isso geralmente resulta em um arquivo enorme que contém todos os seus dados.
Como os snapshots implicam em rastreamento de versão, se você tirar um snapshot no domingo e fizer um backup completo dele, depois tirar outro snapshot na segunda-feira... então, normalmente, o sistema oferecerá a possibilidade de fazer um backup incremental: esse é um arquivo que contém apenas as alterações entre os dois instantâneos. Se você tiver dados enormes, mas apenas uma pequena parte deles for alterada, isso tornará seus backups muito mais rápidos.
Na restauração, você restauraria o backup completo de domingo. Então você pode parar por aí ou restaurar os backups incrementais (em ordem) para recuperar os dados no momento desejado.
The snapshot being read-only is not a requirement. Nothing stops the developers from making it read-write. In this case it will not change the data as it was when the snapshot was taken, but simply fork it into a writable copy, while not having to actually store it all twice. I don't think any SQL database allows this kind of time travel paradox in their database, but this is how all source code version control systems work, like git for example.
Anyway, I hope that clears things up. A backup is a bunch of files. A snapshot is a time portal.
É um pouco confuso, pois o termo pode ser aplicado tanto a um instantâneo quanto a um backup. Por exemplo, uma "imagem de disco" como .iso é um arquivo que contém todo o conteúdo do disco. Portanto, é um backup do disco. Alguns também chamam um instantâneo de imagem. Mas o termo "imagem" também transmite a noção de que você poderá acessá-la diretamente como se fosse real, por exemplo, você pode montar uma ISO, mas não pode executar consultas SQL em um dump SQL de banco de dados, que é apenas um monte de arquivos de texto.