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