Diferença entre backup completo e backup completo somente cópia

17

Vi no thread do SQL Server Central Um backup completo trunca o log? esse backup completo não trunca o log:

Não. Nenhum backup completo ou diferencial trunca o log de transações. - Lynn Pettis
Não - um backup completo não trunca o log. - Chad Crawford

Então, qual é a diferença entre backup completo e backup completo somente para cópia?

Para o backup do log, há um backup somente de cópia, que impede a quebra da cadeia de logs sem truncar o log. Então, o que é backup completo apenas para cópia?

Pesquisador de TI
fonte

Respostas:

14

No mínimo, você precisa considerar backups diferenciais. A menos que apenas a cópia na íntegra seja usada, seu próximo backup diferencial será desativado. Backups somente cópia :

Backups completos apenas para cópia (todos os modelos de recuperação) Um backup somente para cópia não pode servir como base diferencial ou backup diferencial e não afeta a base diferencial.

A única diferença entre cópia completa e cópia completa é que a cópia completa não quebra a cadeia diferencial. Nenhum deles quebra a cadeia de logs, pois trunca o arquivo de log.

Remus Rusanu
fonte
24

A principal diferença entre backups completos e somente cópia é se o LSN (Log Sequence Number) ou não, e especificamente o, DatabaseBackupLSNé atualizado.

Quando você faz um backup completo, o DatabaseBackupLSNé atualizado. Depois de fazer o backup completo, se você fizer um backup diferencial, esse backup terá um DatabaseBackupLSNque corresponde ao do backup completo e, portanto, o SQL poderá vincular os dois (por exemplo, sabe pelos LSNs que o diff seguiu o total).

O problema ocorre quando você agendou backups em execução, portanto, você tem um backup completo inicial e, em seguida, uma sequência de diferenciais. Se você fizer um backup completo manualmente, ele atualizará o LSN e, a partir desse momento, cada backup diferencial feito por meio de backup agendado fará referência ao novo LSN, não o original. No caso de precisar restaurar, você pode restaurar o backup completo agendado, mas, ao tentar restaurar qualquer um dos backups diferenciais realizados após o trabalho manual, descobrirá que ele falhará porque os LSNs não correspondem mais.

Com um backup somente cópia, ele não toca no DatabaseBackupLSNe, como tal, não quebra essa cadeia de backups.

Há uma boa descrição do problema, e por que tantas pessoas o entendem mal em Quebrando a cadeia de backup - REDUX (ou comendo corvo), de Michael K. Campbell, que inclui bons guias visuais como este:

Imagem SQLmag - Backup completo v Backups de Copy_Only

Para obter uma boa explicação dos quatro LSNs diferentes e como eles são usados, consulte Noções básicas sobre números de sequência de log do SQL Server para backups, por Simon Liew.

A maneira de evitar o problema é não ter mais de uma coisa fazendo backups padrão de um banco de dados. Quaisquer backups adhoc ou secundários devem ser feitos com a opção somente cópia, consulte Backups somente cópia (SQL Server) para obter detalhes completos, mas basicamente você usa a opção "Backup somente cópia" no SSMS, via T-SQL, especificar WITH COPY_ONLYno comando , ou com o PowerShell, use o -CopyOnlyparâmetro

Keith Langmead
fonte
1
Para adicionar: Praticamente COPY ONLY permite fazer um backup para fins não relacionados a backup. Para um cliente, os backups são feitos de forma automática em um sistema de backup corporativo - obter uma restauração é PAINFULL, principalmente obter um para um ambiente diferente (papelada, durante o dia). SOMENTE CÓPIA permite que eu faça uma cópia SEM interferir no backup gerenciado pelo backup corporativo e depois restaure-a em um ambiente de teste.
TomTom
12

Suponha que tenhamos um banco de dados com backups agendados. O backup completo é executado uma vez em 24 horas às 00:00, também temos backups diferenciais que são executados a cada 6 horas e backups de log de transações que são executados a cada hora. Então, e se precisarmos fazer um backup completo extra no meio do dia, para restaurar outro servidor? O que devemos fazer neste caso. Claro, podemos fazer um backup completo.

BACKUP DATABASE Test TO DISK = 'C:/Test.bak'

Porém, quando você faz um backup de um banco de dados, existem algumas alterações que influenciam como os seguintes backups serão restaurados (backups diferenciais e backups de log de transações influenciam como será a operação de restauração). Nesse caso, todos os backups diferenciais a seguir dependerão do último backup completo. Se o último backup completo for perdido, a restauração do banco de dados será impossível.insira a descrição da imagem aqui

Mas como podemos fazer um backup que não afetará os seguintes processos de backup ou restauração para esse banco de dados. É aqui que os backups somente de cópia são implementados.

BACKUP DATABASE Test TO DISK = 'C:\Test.bak' WITH COPY_ONLY

insira a descrição da imagem aqui

Alexandr Omelchenko
fonte
2

Quando você possui um backup completo e um conjunto de backups de arquivos de log, uma cadeia de logs é mantida usando o LSN (Log Sequence Number). Se você deseja fazer um backup sem quebrar a cadeia de logs, faça um backup somente de cópia.

Se você não fizer um backup somente cópia, a cadeia de logs será interrompida e o backup que você fizer será o último backup completo. Isso significa que os backups de log anteriores não podem ser aplicados aos backups completos recém-feitos. A cadeia de logs é mantida principalmente para recuperações pontuais ou cenários de envio de logs.

Por exemplo: digamos que você tenha um cenário de backup que faça backups completos a cada 6 horas (meia-noite, 6h, meio-dia, 18h) e faça backups de log a cada 15 minutos. Às 9 horas da manhã, chega um pedido para que uma cópia do seu banco de dados seja colocada em um servidor de teste. Você deseja fazer o backup sem interromper sua cadeia de logs ou interromper suas tarefas de backup. É quando um backup somente de cópia é realizado. O backup somente de cópia não interromperá seus conjuntos de backup regulares.

StanleyJohns
fonte
1
Eu não acho que a cadeia de logs de efeitos de backup somente cópia.Um backup completo somente cópia não redefine a base diferencial. Essa é a única difference.See esses links sqlservercentral.com/Forums/Topic1471058-391-1.aspx?Update=1 e sqlinthewild.co.za/index.php/2011/03/08/...
TI pesquisador
1
Não concordei com sua resposta. Tanto o backup completo como o backup completo apenas da cópia não quebram a cadeia de logs. Além da 'não redefinir a base diferencial', um backup completo de cópia é exatamente o mesmo que um backup completo normal em todos os aspectos. Veja o link do fórum que mencionei no meu comentário anterior.
TI pesquisador
Digamos que você tenha um backup completo: backups de log FB1 e 3: LB1, LB2, LB3. Agora faça um backup completo manual: FB2 (sem copy_only). Aguarde mais 3 backups de log: LB4, LB5, LB6. Agora exclua o FB2. Você pode restaurar FB1 + LB1 + LB2 + LB3 + LB4 + LB5 + LB6?
precisa
Sim, eu posso restaurar. Fiz um backup completo (não somente cópia) do FB1, depois o backup do log (LB1), depois o backup completo (não apenas a cópia) do FB2 e, em seguida, novamente o backup do log (LB2). então eu restaurei nesta sequência FB1 + LB1 + LB2. Restaurado corretamente e localizou todas as linhas inseridas corretamente.
TI pesquisador
2
-1 porque a opção copiar apenas com um backup completo não tem nada a ver com cadeias LSN. O Itresearcher apontou isso, mas você não atualizou / excluiu sua resposta.
Edward Dortland
0

Um backup completo e apenas cópia de backup não quebram a cadeia de logs. somente se você fizer um backup do tlog, haverá uma incompatibilidade de LSN.

Kevin
fonte