Certains de mes collègues ont été surpris lorsque je leur ai dit que je pouvais sauvegarder une base de données SQL Server alors qu'elle était toujours en cours d'exécution et se sont demandé comment c'était possible. Je sais que SQL Server est capable de sauvegarder une base de données alors qu'elle est encore en ligne mais je ne sais pas comment expliquer pourquoi c'est possible. Ma question est quel effet cela a-t-il sur la base de données?
Si les données sont modifiées (par insertion, mise à jour ou suppression) pendant l'exécution de la sauvegarde, la sauvegarde contiendra-t-elle ces modifications ou sera-t-elle ajoutée à la base de données par la suite?
Je suppose que le fichier journal joue un rôle important ici, mais je ne sais pas trop comment.
edit: Tout comme une note, mon cas implique la sauvegarde des bases de données à l'aide de l'Agent SQL Server et les effets des modifications de base de données au cours de ce processus.
la source
Pendant la sauvegarde, un instantané sera créé pour la base de données et les données seront lues pour la sauvegarde à partir de cet instantané. Les opérations DB réelles en direct n'affecteront pas l'opération de sauvegarde.
la source
Vous ne pouvez pas simplement le copier car il peut y avoir des modifications à la mi-copie de la base de données comme vous l'avez mentionné dans la question.
Cela doit être fait avec des agents qui connaissent la fonctionnalité de la base de données, puis prennent un "instantané" via les fonctions du système d'exploitation ou peuvent utiliser un utilitaire pour vider la base de données dans un état sûr (comme mysqldump, si vous utilisez mysql).
Sinon, vous obtenez une sauvegarde qui peut être corrompue et vous ne la saurez pas avant de la restaurer. Je pense que Joel et Jeff en ont récemment parlé un peu lors d'un récent podcast StackOverflow.
Et vous avez raison, le fichier journal est important. Si le fichier journal / journal n'est pas synchronisé avec les données réelles, la restauration des fichiers entraînera une corruption.
Il se résume à une sauvegarde effectuée à l'aide d'un état sûr de la base de données, soit via un agent sensible à la base de données, soit une application de capture instantanée ou une application qui sait comment correctement connecter la base de données à la suppression de données sans interférer avec les mises à jour pendant le vidage des données, puis la sauvegarde le fichier résultant.
la source
Il y a tellement de façons de le faire (en général, aucune idée de la façon dont MSSQL le fait normalement) comme simplement vider la base de données dans un fichier tout en ajoutant des modifications à un fichier journal qui est validé une fois le vidage terminé - utiliser un instantané spécifique au système de fichiers des fonctionnalités comme VSS sur Windows.
la source
Vous pouvez prendre ce qui est connu comme une sauvegarde en copie seule. N'affectera pas la base de données lorsqu'elle est en ligne
la source