Journal des transactions et mise en miroir - à la recherche d'une explication la plus stupide possible

8

Tout d'abord, je dois admettre que je lutte avec le concept de journal des transactions. Je veux dire - je comprends que c'est le journal de toutes les transactions qui se produisent sur la base de données, mais quand il s'agit de le mettre correctement en contexte dans une tâche, il me manque évidemment quelque chose. Donc, à tous ceux qui répondront à la question - n'hésitez pas à développer la théorie derrière le journal des transactions.

La question principale est - J'ai SQL Server 2008 et une base de données de 2 Go dont j'ai besoin en miroir (a 12 Go de journal des transactions). Si je ne mettais pas en miroir cette base de données, je suppose que je pourrais passer en mode simple ou tronquer le journal après la sauvegarde. Mais dans ce cas - que dois-je faire si je souhaite garder ce journal des transactions sous contrôle? Si je comprends bien - je dois conserver tout le journal des transactions si je souhaite pouvoir facilement mettre en miroir la base de données (il suffit de faire une sauvegarde complète).

Y a-t-il un moyen de contourner cela? Idéalement, je souhaite qu'il soit possible de faire une sauvegarde qui conserve à la fois MDF et LDF dans un fichier à chaque fois et une fois la sauvegarde effectuée Le journal des transactions (LDF) sur la base de données est réduit à 0. Le problème avec ce scénario sont les sauvegardes incrémentielles - si ma première sauvegarde journal tronqué, je suppose que la deuxième sauvegarde devra faire référence à la première si je veux faire une mise en miroir plus tard (c'est-à-dire que je serais coincé à garder un tas de fichiers au lieu d'un seul).

Alors - quelqu'un peut-il m'éclairer à ce sujet? Je comprends que j'essaie de combler de nombreux trous ici et que mes "solutions" proposées ne sont peut-être pas les meilleures, mais j'apprécierais sincèrement si quelqu'un peut me pousser dans la bonne direction sur les journaux de transactions, comment elles affectent la mise en miroir et mieux pratiques avec ces deux.

nikib3ro
la source

Réponses:

5

Le journal des transactions est une méthode importante pour restaurer votre base de données à un moment précis. Si vous avez une grande base de données> 500 Go et si vous devez restaurer votre base de données à partir d'une sauvegarde complète, cela coûtera beaucoup de temps. De plus, si vous effectuez une sauvegarde complète de votre base de données à chaque fois, pensez à la durée de cette sauvegarde.

Un concept très simple pour SQL Server peut être: Définir le modèle de récupération de votre base de données complète

Créez un plan de maintenance (1) dans SQL Server:

  • Faites FullBackup chaque semaine, peut-être dans D: \ yourbackup \ FullDBBackup.bak
  • Effectuez une sauvegarde différentielle tous les deux jours dans D: \ yourbackup \ DiffBackup.bak
  • Faites toutes les 2 heures Sauvegardez votre journal des transactions dans D: \ Yourbackup \ Tranlogbackup.trn

Créez un plan de maintenance (2) dans SQL Server:

  • Supprimez tous les fichiers plus anciens 8 jours de D: \ yourBackup * .bak
  • Supprimez tous les fichiers plus anciens 3 jours de D: \ yourBackup * .trn

Dans ce cas, vous êtes en mesure de récupérer votre base de données dans un délai précis, très rapidement très facilement. SQL Server gérera automatiquement vos fichiers de «sauvegarde», les fichiers plus anciens seront supprimés après votre plage horaire spécifique.

Je vous suggère de lire le journal des transactions SQL Server ici:

http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

Pour utiliser les plans de maintenance dans SQL Server, il suffit de demander à BING / google: D

vous devez construire une petite base de données de test et tester cela avant de commencer la production

Shanky
la source
Je n'ai pas de problème avec les sauvegardes complètes et le temps car je peux arrêter tout le système jusqu'à ce qu'ils finissent. Une question sur votre réponse - dois-je tronquer le journal des transactions dans ce scénario? Sinon, je comprends que je n'ai besoin que du dernier FullDBBackup.bak pour faire remonter la base de données? Je ne me soucie pas des moments spécifiques - tout ce qui m'importe, c'est la dernière version de DB que j'obtiens lorsque je fais une sauvegarde. Signification - Je n'ai pas besoin de journaux de transactions; Je les garde simplement à cause de la mise en miroir. Y a-t-il un moyen de contourner cela?
nikib3ro
2
1. vous ne pouvez pas tronquer votre journal: D 2. Si vous effectuez une sauvegarde de votre journal de transfert, SQL Server donnera cet espace libre pour une réutilisation dans votre fichier journal. test simple dbcc sqlperf ('logpsace') avant la sauvegarde, puis faites de même après votre sauvegarde. et à la fin, vous avez besoin du journal des transactions ... testez simplement mon exemple
J'ai finalement pu implémenter vos suggestions dans un environnement de test et jusqu'à présent, j'aime ce que je vois. S'il vous plaît faites le moi savoir si je comprends bien - si j'ai maintenant besoin de restaurer la base de données, j'utiliserais d'abord la sauvegarde COMPLÈTE que j'ai faite, puis en utilisant une combinaison de sauvegardes différentielles et de journaux de transactions, je serais en mesure de restaurer ma base de données dans certain moment? Ai-je raison? Et je suppose également que pour la mise en miroir, je devrais simplement arrêter le serveur et effectuer une sauvegarde complète? Ou aurai-je besoin de journaux de transactions pour configurer la mise en miroir? Merci encore pour toute votre aide et vos réponses!
nikib3ro
3

Afin de profiter de la mise en miroir, vous devez avoir la base de données en mode de récupération complète et devrez effectuer des sauvegardes du journal des transactions afin d'empêcher la croissance du fichier journal. Si vous n'avez pas besoin des sauvegardes de journaux, purgez-les simplement après x heures avec un plan de maintenance, mais elles doivent être prises.

Pour nettoyer l'environnement, vous devez supprimer la mise en miroir, basculer le mode de récupération sur simple, réduire la taille du fichier journal via le Paul Randal Way recommandé , revenir en mode de récupération complète, configurer des sauvegardes complètes et des journaux, puis réinitialiser votre miroir. Vous pouvez essayer de réduire la taille du journal pendant que la mise en miroir est en place, mais il sera beaucoup plus facile de la supprimer en premier. 1 Go ne devrait pas être trop mauvais pour réinitialiser une base de données.

Jason Cumberland
la source