web-dev-qa-db-fra.com

Gestion de la taille du journal des transactions à l'aide d'un plan de maintenance

Y a-t-il des meilleures pratiques pour la configuration d'un plan de maintenance dans SQL Server 2008? Actuellement, je supprime les sauvegardes de base de données et les journaux de transaction de plus de 40 heures, puis la sauvegarde. Problème que j'ai vu est que le journal des transactions est encore très grand. Devrais-je inclure une tâche de plan de bases de données de rétraction?

7
Neil Knight

Si votre fichier journal augmente ce grand, alors vous faites au moins une de ces choses qui ne va pas:

  • si vous avez besoin de récupération de temps à l'heure, vous ne sauvegardez pas le journal assez souvent (et peut-être la base de données aussi). Vous avez peut-être créé un plan de maintenance pour sauvegarder la base de données quotidienne ou hebdomadaire, mais n'a pas configuré de plan de maintenance qui sauvegarde le journal.
  • si vous n'avez pas besoin de récupération de temps à l'heure, vous êtes dans un modèle de récupération complète mais que vous ne devriez pas être. Vous devriez être capable de changer le modèle de récupération pour votre ou vos bases de données à simple. Cela signifie que vous ne pourrez récupérer que pour le moment de la dernière sauvegarde complète ou différentielle, mais cela signifie également que votre fichier journal restera par chèque.
  • dans l'un ou l'autre modèle de récupération, le problème peut être que vous avez une transaction extrêmement longue. Comme dans, quelqu'un a appelé BEGIN TRANSACTION, verrouillé leur poste de travail et je suis allé en vacances.

Beaucoup plus de détails à ce sujet peuvent être vus dans cette question:

Afin de réduire le journal pour le moment, si vous êtes dans un modèle de récupération complète et que vous souhaitez rester de cette façon, vous devez effectuer ces étapes et redémarrer votre chaîne de journal pour être en sécurité:

USE [master];
GO
ALTER DATABASE db_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- if you are already in simple, remove this line:
ALTER DATABASE db_name SET RECOVERY SIMPLE;
GO
CHECKPOINT;
GO
-- if you're already in simple, or want to stay that way, remove this line:
ALTER DATABASE db_name SET RECOVERY FULL;
GO
BACKUP DATABASE db_name TO DISK = 'path' WITH INIT, COMPRESSION;
GO
USE db_name;
GO
DBCC SHRINKFILE(N'db_name_log', 30); -- pick some size that makes sense
GO
USE [master];
GO
-- if recovery is full, re-init log chain, otherwise remove this line:
BACKUP LOG db_name TO DISK = 'path' WITH INIT, COMPRESSION;
GO
ALTER DATABASE db_name SET MULTI_USER;
GO

J'ai commenté des lignes qui doivent être supprimées si vous êtes déjà simple (très improbable) ou si vous souhaitez passer à simple.

5
Aaron Bertrand

Vous ne voulez certainement pas de rétrécissement de fichier programmé, sinon vous vous retrouverez avec une fragmentation horrible du disque. Faites-le manuellement au cas par cas, et seulement lorsque vous êtes sûr que la croissance excessive était une fluke, par exemple en raison de la transmission des sauvegardes qui ne sont pas exécutées, ou un ETL massif qui ne devrait pas se produire régulièrement.

Faites des sauvegardes assez souvent (et gardez-les assez longtemps) pour répondre aux exigences de conservation de votre entreprise/application. Considérez également que vous devriez également créer des sauvegardes de journal suffisamment pour conserver le journal des transactions dans une taille acceptable. Dans mon cas, je courais des sauvegardes de journal toutes les heures en semaine, mais il y a beaucoup de place pour ajuster le calendrier à vos besoins. Exécutez-les plus souvent pour réduire le gonflement de la bûche, et moins souvent pour rétablir la séquence du journal moins de douleur.

4
db2

Votre journal de transaction est toujours très important probablement en raison de la quantité d'activité. Si vous souhaitez pouvoir restaurer sur le point de pointe (mode de récupération complète) et contrôler le journal des transactions, les sauvegardes de journal de transaction plus fréquentes sont la réponse.

Nous avons un 300 gb =OLTP Database avec un espace de journal alloué de 30 Go. J'ai un travail en place pour prendre des sauvegardes de journal toutes les 30 minutes et conserve bien le fichier journal sous l'espace alloué (même pendant L'index mensuel reconstruit. La taille de la sauvegarde des journaux pendant les reconstitutions sera grande, cependant).

Rétrécissement n'est pas une bonne pratique du tout.

0
RK Kuppala

tilisez le plan de maintenance pour planifier des sauvegardes DB dans SQL Server.

  • Pour la récupération de point à temps, créez complet Sauvegarde de la base de données programmée quotidiennement (à minuit) et les sauvegardes de journal de transaction planifiées toutes les 4 heures.

  • Pour aucune récupération de temps à temps, modifiez le modèle de récupération DB comme SIMPLE avec la sauvegarde de la base de données programmée quotidiennement (à minuit).

  • Vous pouvez également vérifier les transactions ouvertes à l'aide de DBCC Opentran puis tuez cette transaction à l'aide de Kill Spid

  • Utilisez DBCC SQLPERF (logspace) Pour obtenir l'état de la taille de votre fichier journal et de l'espace réel utilisé dans ce fichier journal. Si l'espace libre est beaucoup plus que de réduire le fichier journal de la base de données.

0
dsingh

Même les plans de maintien de la maintenance offrent des avantages, tels que l'interface graphique et le soutien à des emplois indigènes, certains inconvénients que vous devriez être au courant. Vous devez conserver à la fois des plans de sauvegarde de maintenance et des emplois de l'agent afin de maintenir la cohérence et d'éviter les collisions de processus. De plus, il n'y a pas de détection de collision et vos tâches peuvent échouer si des tâches simultanées sont planifiées sur la même base de données. Donc, un test détaillé doit être effectué à chaque fois que vous définissez des plans de maintenance

0
Ivan Stankovic