web-dev-qa-db-fra.com

Comment gérer la taille du journal SQL Server

J'essaie de gérer la taille d'un fichier journal SQL Server 2008. J'ai une base de données de rapport qui est chargée une fois par jour. Le modèle de récupération simple est le meilleur ajustement car il n'y a pas de transactions autres que la charge du matin et je peux recréer ces enregistrements. Mes objectifs sont d’avoir le journal des transactions à une taille fixe, suffisamment grande pour ne pas avoir à allouer de nouvel espace lors du chargement.

Mon problème est que le journal continue de croître. Je sais que le journal est censé être marqué pour être réutilisé, mais pourquoi le journal continue-t-il de croître? Le log_reuse_wait_desc affiche "Rien".

Je peux réduire le fichier journal à 1 Mo, donc je sais qu'il ne contient aucune transaction. Je peux configurer un travail pour le faire, mais je préférerais laisser le journal à 500 Mo, ce qui est suffisant pour gérer les charges quotidiennes. Si je fais cela, le journal se développe.

Comment puis-je conserver le journal à une taille cohérente?

Remarque: la réduction du fichier journal ne résout pas ce problème. Je sais comment faire ca. J'essaie de trouver un moyen de réutiliser de l'espace dans le journal des transactions.

15
Ed Mays

Le fichier journal est utilisé à des fins transactionnelles, même si la base de données est en mode de récupération simple. Si la taille du journal dépasse réellement 500 Mo, une personne exécute une requête ou une procédure stockée nécessitant cet espace.

Par exemple, vous créez peut-être des index par rapport à vos tables de génération de rapports. Cela sera fait dans une transaction afin que les modifications puissent être annulées en cas d'erreur. Cependant, l'espace utilisé sera libéré par la suite pour d'autres transactions une fois terminé.

Ainsi, si la taille du journal commence à 1 Mo et augmente pour atteindre 700 Mo, quelque chose est en cours de réalisation qui nécessite cet espace. Si vous verrouillez la taille à 500 Mo, vous recevrez éventuellement une erreur «fichier journal insuffisant».

Mais si vous voulez vraiment régler le problème à 500 Mo, vous pouvez procéder comme suit: (J'utilise SQL Server 2005)

  1. Lancer Microsoft SQL Server Management Studio
  2. Localisez votre base de données et faites un clic droit dessus. Sélectionnez Propriétés.
  3. Cliquez sur la section Fichiers
  4. Localisez la ligne LOG FILE.
  5. Changer la taille initiale à: 500
  6. Localisez la section croissance automatique et cliquez sur l'ellipse (...)
  7. Décochez "Activer la croissance automatique". Cliquez sur OK.
  8. Cliquez sur OK pour effectuer le changement.

Remarque: vous pouvez également définir une taille de fichier journal maximale dans la "section croissance automatique".

Vous pouvez également utiliser le script suivant pour effectuer le changement. Remplacez DATABASENAME par la valeur appropriée. Modifiez également le nom du fichier journal si nécessaire.

USE [master]
GO
ALTER DATABASE [DatabaseName] MODIFY FILE ( NAME = N'DATABASENAME_Log', SIZE = 512000KB , FILEGROWTH = 0)
GO

25
beach

créer un travail de maintenance qui sauvegarde la base de données et réduit le journal

4
SQLMenace

La commande DBCC Shrinkfile vous permet de spécifier une taille cible:

DBCC SHRINKFILE (DataFile1, 7)

Réduit le fichier DataFile1 à 7 Mo

Document à: MSDN

3
cjk

Vous pouvez utiliser DBCC SHRINKFILE à cet effet.

0
Miles D