La principale différence entre les sauvegardes complètes et de copie uniquement est de savoir si le LSN (Log Sequence Number), et en particulier le, DatabaseBackupLSN
est mis à jour.
Lorsque vous effectuez une sauvegarde complète, le DatabaseBackupLSN
est mis à jour. Après avoir effectué la sauvegarde complète, si vous effectuez une sauvegarde différentielle, cette sauvegarde a une DatabaseBackupLSN
qui correspond à celle de la sauvegarde complète, et par conséquent SQL peut lier les deux ensemble (par exemple, il sait à partir de ces LSN que le diff a suivi la totalité).
Le problème survient lorsque vous avez planifié des sauvegardes, vous avez donc une sauvegarde complète initiale, puis une séquence de différentiels. Si vous effectuez manuellement une sauvegarde complète, il mettra à jour le LSN, puis à partir de ce moment, chaque sauvegarde différentielle effectuée via une sauvegarde planifiée fera référence à ce nouveau LSN et non à l'original. En cas de besoin de restauration, vous pouvez restaurer votre sauvegarde complète planifiée, mais lorsque vous essayez de restaurer l'une des sauvegardes différentielles effectuées après le travail manuel, vous constaterez qu'elle échouera car les LSN ne correspondent plus.
Avec une sauvegarde de copie uniquement, elle ne touche pas à DatabaseBackupLSN
, et en tant que telle ne rompt pas cette chaîne de sauvegardes.
Il y a une bonne description du problème, et pourquoi tant de gens le comprennent mal dans Breaking the Backup Chain - REDUX (Or Eating Crow) de Michael K. Campbell, qui comprend de bons guides visuels comme celui-ci:
Pour une bonne explication des quatre LSN différents et de la façon dont ils sont utilisés, consultez la rubrique Présentation des numéros de séquence de journaux SQL Server pour les sauvegardes par Simon Liew.
La façon d'éviter le problème est de ne pas avoir plus d'une chose à faire des sauvegardes standard d'une base de données. Toutes les sauvegardes adhoc ou secondaires doivent être effectuées avec l'option de copie uniquement, voir Sauvegardes de copie uniquement (SQL Server) pour plus de détails, mais vous utilisez essentiellement l'option "Copie de sauvegarde uniquement" dans SSMS, via T-SQL, spécifiez WITH COPY_ONLY
dans la commande ou avec PowerShell, utilisez le -CopyOnly
paramètre.
Supposons que nous ayons une base de données avec des sauvegardes planifiées. La sauvegarde complète s'exécute une fois toutes les 24 heures à 00h00, nous avons également des sauvegardes différentielles qui s'exécutent toutes les 6 heures et des sauvegardes du journal des transactions qui s'exécutent toutes les heures. Alors, que se passe-t-il si nous devons effectuer une sauvegarde complète supplémentaire au milieu de la journée, pour restaurer un autre serveur? Que ferons-nous dans ce cas. Bien sûr, nous pouvons faire une sauvegarde complète.
BACKUP DATABASE Test TO DISK = 'C:/Test.bak'
Mais lorsque vous effectuez une sauvegarde d'une base de données, certains changements influencent la façon dont les sauvegardes suivantes seront restaurées (les sauvegardes différentielles et les sauvegardes du journal des transactions influencent toutes deux la façon dont l'opération de restauration sera). Dans ce cas, toutes les sauvegardes différentielles suivantes dépendront de la dernière sauvegarde complète. Si la dernière sauvegarde complète est perdue, la restauration de la base de données est impossible.
Mais comment pouvons-nous effectuer une sauvegarde qui n'affectera pas les processus de sauvegarde ou de restauration suivants pour cette base de données. C'est là que les sauvegardes en copie seule entrent en place.
BACKUP DATABASE Test TO DISK = 'C:\Test.bak' WITH COPY_ONLY
la source
Lorsque vous disposez d'une sauvegarde complète et d'un ensemble de sauvegardes de fichiers journaux, une chaîne de journaux est conservée à l'aide du LSN (Log Sequence Number). Si vous souhaitez effectuer une sauvegarde sans interrompre la chaîne de journaux, effectuez une sauvegarde en copie seule.
Si vous n'effectuez pas de sauvegarde en copie seule, la chaîne de journaux est interrompue et la sauvegarde que vous effectuez sera la dernière sauvegarde complète. Cela signifie que les sauvegardes de journaux précédentes ne peuvent pas être appliquées aux sauvegardes complètes nouvellement prises. La chaîne de journaux est principalement maintenue pour les récupérations ponctuelles ou les scénarios d'envoi de journaux.
Par exemple: supposons que vous ayez un scénario de sauvegarde qui prend des sauvegardes complètes toutes les 6 heures (minuit, 6 h, midi, 18 h) et enregistre les sauvegardes toutes les 15 minutes. Une demande arrive à 9 h pour placer une copie de votre base de données sur un serveur de test. Vous souhaitez effectuer la sauvegarde sans interrompre votre chaîne de journaux ni interrompre vos travaux de sauvegarde. C'est lorsqu'une sauvegarde en copie seule est effectuée. La copie de sauvegarde uniquement ne perturbera pas vos jeux de sauvegarde habituels.
la source
Une sauvegarde complète et une copie uniquement ne cassent pas la chaîne de journaux. ce n'est que si vous effectuez une sauvegarde tlog qu'il y aura une incompatibilité LSN.
la source