web-dev-qa-db-fra.com

Sauvegarde / restauration SQL Server vs détacher / attacher

J'ai une base de données qui contient les données les plus récentes et je souhaite répliquer le contenu de la base de données sur d'autres serveurs. Pour des raisons non techniques, je ne peux pas utiliser directement la fonction de réplication ou la fonction de synchronisation pour synchroniser avec d'autres instances de SQL Server.

Maintenant, j'ai deux solutions, et je veux apprendre les avantages et les inconvénients de chaque solution. Merci!

Solution 1: détachez la base de données source qui contient les données les plus récentes, puis copiez-la sur les serveurs de destination qui ont besoin des données les plus récentes et attachez la base de données sur les serveurs de destination;

Solution 2: effectuez une sauvegarde complète du serveur source pour l'ensemble de la base de données, puis copiez les données sur les serveurs de destination et effectuez une récupération complète côté serveur de destination.

merci d'avance, George

35
George2

L'option Détacher/Attacher est souvent plus rapide que d'effectuer une sauvegarde car elle n'a pas besoin de créer un nouveau fichier. Par conséquent, le temps entre le serveur A et le serveur B est presque purement le temps de copie de fichier.

L'option de sauvegarde/restauration vous permet d'effectuer une sauvegarde complète, de la restaurer, puis d'effectuer une sauvegarde différentielle, ce qui signifie que votre temps d'arrêt peut être réduit entre les deux.

Si vous recherchez la réplication de données, cela signifie-t-il que vous souhaitez que la base de données soit fonctionnelle dans les deux emplacements? Dans ce cas, vous souhaiterez probablement l'option de sauvegarde/restauration car cela laissera la base de données actuelle entièrement fonctionnelle.

EDIT: Juste pour clarifier quelques points. Par temps d'arrêt, je veux dire que si vous migrez une base de données d'un serveur à un autre, vous empêcherez généralement les utilisateurs de l'utiliser pendant son transit. Par conséquent, du point "d'arrêt" sur le serveur A jusqu'au point "de départ" sur le serveur B, cela peut être considéré comme un temps d'arrêt. Sinon, toutes les actions effectuées sur la base de données sur le serveur A pendant le transit ne seront pas répliquées sur le serveur B.

En ce qui concerne la "création d'un nouveau fichier". Si vous détachez une base de données, vous pouvez copier le fichier MDF immédiatement. Il est déjà prêt à être copié. Cependant, si vous effectuez une sauvegarde, vous devez attendre que le fichier .BAK soit créé puis le déplacer vers son nouvel emplacement pour une restauration. Encore une fois, tout se résume à une copie instantanée ou une migration.

25
Robin Day

La sauvegarde et la restauration ont beaucoup plus de sens, même si vous pouvez à la place perdre quelques minutes supplémentaires à partir d'une option d'attachement de détachement. Vous devez mettre la base de données d'origine hors ligne (déconnecter tout le monde) avant un détachement, puis la base de données n'est pas disponible jusqu'à ce que vous la rattachiez. Vous devez également garder une trace de tous les fichiers, alors qu'avec une sauvegarde, tous les fichiers sont regroupés. Et avec les versions les plus récentes de SQL Server, les sauvegardes sont compressées.

Et juste pour corriger quelque chose: les sauvegardes DB et les sauvegardes différentielles ne tronquent pas le journal et ne cassent pas la chaîne de journaux.

De plus, la fonctionnalité COPY_ONLY n'a d'importance que pour la base différentielle, pas pour le LOG. Toutes les sauvegardes de journaux peuvent être appliquées en séquence à partir de n'importe quelle sauvegarde en supposant qu'il n'y a pas eu de rupture dans la chaîne de journaux. Il y a une légère différence avec le point d'archivage, mais je ne vois pas où cela compte.

8
Gerard ONeill

La solution 2 serait mon choix ... Principalement parce qu'elle ne créera aucun temps d'arrêt sur la base de données source. Le seul inconvénient que je peux voir est qu'en fonction du modèle de récupération de la base de données, le journal des transactions sera tronqué, ce qui signifie que si vous souhaitez restaurer des données à partir du journal des transactions, vous serez bourré, vous devrez utiliser votre fichier de sauvegarde.

EDIT: Trouvé un joli lien; http://sql-server-performance.com/Community/forums/p/5838/35573.aspx

4
GordonB