SQL Server (2005/2008): La sauvegarde complète tronque-t-elle le journal en mode de récupération complète

41

Je viens de lire une grande partie de la documentation MSDN et je pense comprendre les différents modèles de récupération et le concept de chaîne de sauvegarde. J'ai encore une question:

Une sauvegarde complète de la base de données tronque-t-elle le journal des transactions (en mode de récupération complète)?

  • Si oui: Où est-ce mentionné dans le MSDN? Tout ce que j'ai pu trouver, c'est que seul BACKUP LOG tronque le journal.

  • Si non: pourquoi? Dans la mesure où une sauvegarde complète de la base de données lance une nouvelle chaîne de sauvegarde, à quoi sert-elle de conserver les transactions terminées avant la sauvegarde complète dans le journal?

Heinzi
la source

Réponses:

43

Nope - ce n'est certainement pas. La seule chose qui permet au journal d'effacer / de tronquer dans les modèles de récupération FULL ou BULK_LOGGED est une sauvegarde de journal - sans exception. J'avais eu cet argument il y a quelque temps et j'ai posté un article de blog long et détaillé avec une explication et un script que vous pouvez utiliser pour vous le prouver, à l'aide d' idées fausses relatives au journal et aux sauvegardes du journal: comment vous en convaincre .

N'hésitez pas à faire un suivi avec plus de questions. Btw - voir également le long article que j'ai écrit pour TechNet Magazine sur la journalisation et la récupération dans SQL Server .

Merci

Paul Randal
la source
Merci beaucoup monsieur pour votre SUPER RÉPONSE et l'article qui y est répondu à un million de questions.
Ali
13

Une sauvegarde complète ne tronque PAS le journal, vous devez effectuer une opération de journal de sauvegarde. Une sauvegarde complète NE RÉINITIALISE PAS la chaîne de journaux - cela gâcherait totalement la réplication / l'envoi des journaux, etc.

Vous devez examiner de près la façon dont SQL Server effectue les sauvegardes, mais sachez que les transactions en vol ou à exécution longue ne sont pas incluses dans la sauvegarde (sinon, la sauvegarde risque de ne jamais s'achever). Il n'est donc pas assez précis de dire qu'une sauvegarde complète d'un online-database est assuré de rendre la prochaine sauvegarde du journal obsolète.

http://msdn.microsoft.com/en-us/library/ms175477.aspx

Matt Rogish
la source
8

À ma connaissance, la seule chose qui tronque le journal des transactions est une sauvegarde du journal .

Une sauvegarde complète ne copie que suffisamment du journal pour qu'il soit cohérent sur le plan des transactions, car l'opération de sauvegarde prend un certain temps et les pages copiées peuvent avoir changé.

Vous avez toujours besoin de vos sauvegardes de journal pour la récupération à un moment précis.

Je n'ai pas de lien vers MSDN, mais je peux vous connecter au blog de Paul Randal , développeur de l'équipe SQL Server, qui a écrit DBCC CHECKDB et des parties de la documentation en ligne.

Il répond également aux questions sur ce forum, de sorte que ce serait une autorité encore meilleure que les informations en 2ème / 3ème main de moi :)

Nick Kavadias
la source
5

Les gens ont souvent une idée fausse à propos de la sauvegarde complète et des sauvegardes du journal. Pour que la sauvegarde fonctionne dans le FULLmodèle de récupération de sauvegarde, vous devez utiliser les journaux t, car pendant les sauvegardes, il peut toujours y avoir des transactions en cours dans la base de données (sauf si vous effectuez une COLDsauvegarde lorsque vous arrêtez la base de données). Oracle utilise le même concept lorsque vous avez une base de données en ARCHIVELOGmode. La séquence d'une sauvegarde se résume à ceci:

  1. Démarrer la sauvegarde - suspendre toutes les actions dans des fichiers réels et écrire dans t-logs.
  2. Effectuer une sauvegarde - toutes les transactions se poursuivent, mais ne sont pas écrites dans de vrais fichiers, elles sont écrites dans t-logs
  3. Fin de la sauvegarde - reprenez l’écriture des transactions de la base de données dans des fichiers réels.
  4. Si nécessaire, videz le contenu du T-log dans les vrais fichiers.

C’est la raison pour laquelle les journaux t ne sont pas tronqués / rétrécis par défaut, car ils constituent un élément essentiel de la poursuite des transactions pendant la phase de sauvegarde.

Peter
la source
1

Ne confondez pas la troncation du journal avec la réduction du journal.

  • TRUNCATE consiste à supprimer les transactions dans le journal qui se trouvent avant le dernier point de contrôle (le point de contrôle étant lorsque les transactions sont vidées dans la base de données elle-même). Ceci est fait en utilisant la commande BACKUP.

  • Pour réduire le journal, vous devez réduire la taille réelle du fichier journal. Ceci est fait en utilisant des commandes DBCC.


la source
1

En gros, vous n'avez pas besoin de réduire automatiquement le journal des transactions à chaque fois, car les journaux des transactions ont besoin d'espace pour fonctionner et si vous les tronquez automatiquement, ils resteront presque de la même taille.


la source