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 DatabaseBackupLSN
que 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 DatabaseBackupLSN
e, 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:
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_ONLY
no comando , ou com o PowerShell, use o -CopyOnly
parâmetro
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.
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
fonte
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.
fonte
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.
fonte