Différence entre la sauvegarde complète et la sauvegarde complète en copie seule

17

J'ai vu dans le thread central de SQL Server Une 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?

Chercheur informatique
la source

Réponses:

14

À 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.

Remus Rusanu
la source
24

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, DatabaseBackupLSNest mis à jour.

Lorsque vous effectuez une sauvegarde complète, le DatabaseBackupLSNest mis à jour. Après avoir effectué la sauvegarde complète, si vous effectuez une sauvegarde différentielle, cette sauvegarde a une DatabaseBackupLSNqui 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:

Image SQLmag - Sauvegardes complètes v Sauvegardes Copy_Only

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_ONLYdans la commande ou avec PowerShell, utilisez le -CopyOnlyparamètre.

Keith Langmead
la source
1
Pour ajouter: pratiquement COPIER SEULEMENT permet d'effectuer une sauvegarde à des fins autres que la sauvegarde. Pour un client, les sauvegardes sont effectuées automatiquement sur un système de sauvegarde d'entreprise - obtenir une restauration est PAINFULL, en particulier en obtenir une dans un environnement différent (paperasse, faire pendant la journée). COPY ONLY me permet de faire une copie SANS interférer avec la sauvegarde gérée par la sauvegarde d'entreprise, puis de la restaurer dans un environnement de test.
TomTom
12

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.entrez la description de l'image ici

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

entrez la description de l'image ici

Alexandr Omelchenko
la source
2

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.

StanleyJohns
la source
1
Je ne pense pas que la chaîne de journaux des effets de sauvegarde en copie seule. Une sauvegarde complète en copie seule ne réinitialise pas la base différentielle. C'est la seule différence.Voir ces liens sqlservercentral.com/Forums/Topic1471058-391-1.aspx?Update=1 et sqlinthewild.co.za/index.php/2011/03/08/…
Chercheur informatique,
1
Je n'étais pas d'accord avec ta réponse. La sauvegarde complète et la sauvegarde complète sur copie uniquement ne rompent pas la chaîne de journalisation.Autre que la `` base différentielle non réinitialisée '', une sauvegarde complète de copie uniquement est exactement la même qu'une sauvegarde complète normale dans tous les sens. Voir le lien du forum que j'ai mentionné dans mon commentaire précédent.
Chercheur informatique,
Disons que vous avez une sauvegarde complète: FB1 et 3 sauvegardes de journaux: LB1, LB2, LB3. Faites maintenant une sauvegarde complète manuelle: FB2 (sans copy_only). Attendez 3 autres sauvegardes de journaux: LB4, LB5, LB6. Supprimez maintenant FB2. Pouvez-vous restaurer FB1 + LB1 + LB2 + LB3 + LB4 + LB5 + LB6?
StanleyJohns
Oui, je peux restaurer. j'ai pris une sauvegarde complète (pas copie uniquement) FB1, puis une sauvegarde du journal (LB1), puis une sauvegarde complète (pas une copie uniquement) FB2, puis à nouveau une sauvegarde du journal (LB2). puis j'ai restauré dans cette séquence FB1 + LB1 + LB2. Restauré correctement et trouvé toutes les lignes correctement entrées.
Chercheur informatique,
2
-1 car l'option de copie uniquement avec une sauvegarde complète n'a rien à voir avec les chaînes LSN. Itresearcher l'a souligné mais vous n'avez pas mis à jour / supprimé votre réponse.
Edward Dortland du
0

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.

Kevin
la source