J'ai vu dans le thread SQL Server Central ne sauvegarde complète tronque-t-elle le journal? cette sauvegarde complète ne tronque pas le journal:
Non. Aucune sauvegarde complète ou différentielle ne tronque le journal des transactions. - Lynn Pettis
Non - une sauvegarde complète ne tronque pas le journal. - Chad Crawford
Quelle est donc la différence entre la sauvegarde complète et la sauvegarde complète en copie seule?
Pour la sauvegarde du journal, il existe une sauvegarde en copie seule qui empêche la chaîne de journaux de se casser sans tronquer le journal. Qu'est-ce qu'une sauvegarde complète en copie seule?
À tout le moins, vous devez envisager des sauvegardes différentielles. Sauf si la copie uniquement sur la totalité est utilisée, votre prochaine sauvegarde diff sera désactivée. Sauvegardes en copie seule :
Sauvegardes complètes en copie seule (tous les modèles de récupération) Une sauvegarde en copie seule ne peut pas servir de base différentielle ou de sauvegarde différentielle et n'affecte pas la base différentielle.
La seule différence entre la copie complète et la copie complète est que la copie complète ne rompt pas la chaîne différentielle. Aucun d'eux ne rompt la chaîne de journaux car aucun d'eux ne tronque le fichier journal.
La principale différence entre les sauvegardes complètes et les copies uniquement est la mise à jour ou non du LSN (Log Sequence Number), et en particulier du DatabaseBackupLSN
.
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 un DatabaseBackupLSN
qui correspond à celui de la sauvegarde complète, et donc SQL peut lier les deux ensemble (par exemple, il sait à partir de ces LSN que le diff a suivi le plein).
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 en copie seule, elle ne touche pas le DatabaseBackupLSN
et, en tant que telle, ne rompt pas cette chaîne de sauvegardes.
Il y a une bonne description du problème, ainsi que pourquoi tant de gens le comprennent mal Breaking the Backup Chain - REDUX (Or Eating Crow) par 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, jetez un œil à nderstanding SQL Server Log Sequence Numbers for Backups by 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écifie 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 devons-nous faire 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
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 journal 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.
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.