O que acontece durante um backup ao vivo do SQL Server?

18

Alguns dos meus colegas de trabalho ficaram surpresos quando eu lhes disse que posso fazer backup de um banco de dados do SQL Server enquanto ele ainda está em execução e me pergunto como isso é possível. Eu sei que o SQL Server é capaz de fazer backup de um banco de dados enquanto ele ainda está online, mas não sei como explicar por que isso é possível. Minha pergunta é que efeito isso tem no banco de dados?

Se os dados forem modificados (por uma inserção, atualização ou exclusão) enquanto o backup estiver em execução, o backup conterá essas alterações ou será adicionado ao banco de dados posteriormente?

Estou assumindo que o arquivo de log desempenha um papel importante aqui, mas não sei bem como.

editar: como observação, meu caso envolve o backup dos bancos de dados usando o SQL Server Agent e os efeitos das modificações no banco de dados durante esse processo.

Sean Howat
fonte

Respostas:

24

O backup completo contém os dados e o log. Para dados, ele simplesmente copia cada página do banco de dados no backup, como no momento em que lê a página. Em seguida, anexa à mídia de backup todo o log 'relevante'. Isso inclui, no mínimo, todo o log entre o LSN no início da operação de backup e o LSN no final da operação de backup. Na realidade, geralmente há mais log, pois ele deve incluir todas as transações ativas no início do backup e do log necessários para a replicação. Consulte Desmistificando alguns mitos sobre backups completos de banco de dados .

Quando o banco de dados é restaurado, todas as páginas de dados são copiadas para os arquivos do banco de dados, e todas as páginas de log são copiadas para os arquivos de log. O banco de dados está inconsistente no momento, pois contém imagens da página de dados que podem estar fora de sincronia. Mas agora uma recuperação normal é executada. Como o log contém todo o log durante o backup, no final da recuperação, o banco de dados é consistente.

Remus Rusanu
fonte
11
Um ótimo post e o link ajudaram a dar um bom exemplo. Obrigado.
quer
Muito conciso. Bom trabalho!
allen1
2

Durante o backup, a captura instantânea será criada para o banco de dados e os dados serão lidos para backup a partir dessa captura instantânea. As operações reais do banco de dados ao vivo não afetarão a operação de backup.

Aravind
fonte
1

Você não pode simplesmente copiá-lo, pois pode haver alterações no meio da cópia do banco de dados, conforme mencionado na pergunta.

Isso deve ser feito com agentes que estão cientes da funcionalidade do banco de dados e, em seguida, obtém um "instantâneo" via funções do SO ou pode usar um utilitário para despejar o banco de dados em um estado seguro (como o mysqldump, se estiver usando o mysql).

Caso contrário, você obterá um backup que pode estar corrompido e não o conhecerá até restaurá-lo. Acho que Joel e Jeff recentemente conversaram um pouco sobre isso em um podcast recente do StackOverflow.

E você está certo de que o arquivo de log é importante. Se o arquivo de diário / log estiver fora de sincronia com os dados reais, a restauração dos arquivos resultará em corrupção.

Ele se resume a um backup obtido usando um estado seguro do banco de dados, por meio de um agente que reconhece o banco de dados ou aplicativo de captura instantânea ou aplicativo que sabe como conectar corretamente o banco de dados a descarte de dados sem interferir nas atualizações durante o despejo de dados e o backup o arquivo resultante.

Bart Silverstrim
fonte
Esta é uma resposta mais generalizada, mas esqueci de incluir que estava trabalhando com o SQL Server Agent primeiro. Ele ainda forneceu alguns bons detalhes sobre o que poderia estar acontecendo durante esse processo, apesar do método, por isso ajudou de qualquer maneira! Obrigado.
quer
0

Existem muitas maneiras de fazer isso (de um modo geral, sem idéia de como o MSSQL normalmente faz isso), como simplesmente descarregar o banco de dados no arquivo e anexar quaisquer alterações em um arquivo de log que é confirmado após a conclusão do dump - utilizando o instantâneo específico do sistema de arquivos recursos como o VSS no Windows.

Oskar Duveborn
fonte
Além disso, os bancos de dados baseados no MVCC a partir do zero (como PostGres) podem usar esse conjunto de comportamentos para manter uma captura instantânea da qual o backup copia e, ao mesmo tempo, permitir atualizações nos arquivos de dados por transações iniciadas durante a execução do backup. Como você diz, existem vários métodos, o usado depende do design principal do mecanismo de armazenamento de dados e dos recursos de processamento de transações.
precisa saber é o seguinte
-1

Você pode usar o que é conhecido como backup somente cópia. Não afetará o banco de dados enquanto estiver on-line

darotweiler
fonte
O que é um backup somente cópia? Como é realizado? Há alguma ressalva a considerar? Algum link para exemplos de uma fera sendo executada? Se você enviar uma resposta, imagine o que pode ser útil para descobrir se alguém tiver essa pergunta em dois ou três anos.
Rnxrx