Quelle est la commande pour tronquer un fichier journal SQL Server?


192

Je dois vider un fichier LDF avant de l'envoyer à un collègue. Comment forcer SQL Server à tronquer le journal?

Réponses:


131

si je me souviens bien ... dans l'analyseur de requêtes ou équivalent:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
C'est certainement mieux que de définir le modèle de récupération de base de données sur SIMPLE (comme dans la réponse de Blorgbeard) car si votre modèle de récupération est COMPLET, vous l'avez défini de cette façon pour une raison.
Scott Whitlock

52
truncate_only est déconseillé dans SQL Server 2008, vous devez donc basculer la base de données vers une récupération simple msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Justin Moore

10
Pour SQL Server 2012, cela fonctionne, mais sans WITH TRUNCATE_ONLY.
net_prog

4
Pour ajouter à ce que net_prog a dit, pour SQL Server 2012, j'ai substitué la première ligne BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Aaron Newton

'TRUNCATE_ONLY' n'est pas une option de SAUVEGARDE reconnue. (SQL Server 2019 RC1)
Tomasz Gandor

304

En studio de gestion:

  • Ne faites pas cela dans un environnement réel, mais pour vous assurer de réduire autant que possible votre base de données de développement:
    • Cliquez avec le bouton droit sur la base de données, choisissez Properties, puis Options.
    • Assurez-vous que "Modèle de récupération" est défini sur "Simple", et non sur "Complet"
    • Cliquez sur OK
  • Cliquez de nouveau avec le bouton droit sur la base de données, choisissez Tasks-> Shrink->Files
  • Changer le type de fichier en "Journal"
  • Cliquez sur OK.

Alternativement, le SQL pour le faire:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Réf: http://msdn.microsoft.com/en-us/library/ms189493.aspx


1
Votre réponse vient de me sauver la journée! Je ne connaissais pas l'option "clic droit - Tâches -> Rétrécir". Je vous remercie!
René

7
Que faites-vous dans un environnement vivant? Sauvegarder les journaux d'abord?
John Bubriski

1
Je ne suis pas DBA, mais oui, je pense que la sauvegarde du journal le tronquera: technet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard est sorti

2
@JohnBubriski Si vous utilisez un modèle de récupération autre que simple, les journaux sont la base de la récupération des données ou de l'annulation des transactions. Ainsi, en production, vous devrez d'abord sauvegarder ces journaux avant de pouvoir réduire les fichiers journaux. Sinon, il n'y aurait aucune possibilité de récupération réelle. Malheureusement, si vous êtes dans une situation de récupération, vous devrez recharger toutes les sauvegardes du journal des transactions afin de récupérer complètement la base de données. Des moments de plaisir, c'est sûr! :)
définit

1
dans SQL Server 2012, je devais use mydatabaseavant d'exécuterdbcc shrinkfile
knb

62

Pour SQL Server 2008, la commande est:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

Cela a réduit mon fichier journal de 14 Go à 1 Mo.


5
La question étant ambiguë quant à la version et la réponse acceptée ne s'applique pas à SQL Server 2008, cette réponse est toujours valide quel que soit l'âge.
James Law

Merci, cela m'a aidé à réduire un gros fichier journal qui n'a pas réagi avec DBCC SHRINKFILE
Christian Navelot

6
N'oubliez pas de remettre le modèle de récupération sur PLEIN lorsque vous avez terminé!
Dan Bechard

Vous devez sauvegarder avant de faire cela (ou l'une des autres options de troncature). Si vous effectuez une sauvegarde complète et cochez la case «Copier uniquement la sauvegarde» dans SSMS, vous n'avez plus besoin du journal. (Ce n'est qu'une sauvegarde ponctuelle).
Simon_Weaver

37

Pour SQL 2008, vous pouvez sauvegarder le journal sur l' nulappareil:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

Et puis utilisez DBCC SHRINKFILEpour tronquer le fichier journal.


2
C'est le seul qui a fini par fonctionner dans ma situation ... J'ai eu une erreur en essayant d'utiliser la sauvegarde avec TRUNCATE_ONLY
TomXP411

Remarque: cela peut prendre un certain temps, même sur SSD (il faut lire le journal pour pouvoir le jeter). Pour un fichier journal de 30 Go sur une machine virtuelle Azure de puissance moyenne, il faut 10 minutes pour faire 40%. Assurez-vous de passer à la prise «Messages» dans SSMS pour voir le pourcentage traité.
Simon_Weaver

3

journal de sauvegarde nom du journal avec truncate_only suivi d'une commande dbcc shrinkfile


0

Depuis la réponse pour moi a été enterrée dans les commentaires. Pour SQL Server 2012 et au-delà, vous pouvez utiliser les éléments suivants:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

Une autre option consiste à détacher la base de données via Management Studio. Ensuite, supprimez simplement le fichier journal, ou renommez-le et supprimez plus tard.

De retour dans Management Studio, attachez à nouveau la base de données. Dans la fenêtre d'attachement, supprimez le fichier journal de la liste des fichiers.

La base de données joint et crée un nouveau fichier journal vide. Après avoir vérifié que tout va bien, vous pouvez supprimer le fichier journal renommé.

Vous ne devriez probablement pas l'utiliser pour les bases de données de production.


4
Ne fais jamais ça! Il peut y avoir des données dans le journal non encore validées dans le fichier de données. Vous perdriez ces données.
Paul

Si, dans votre réponse, vous prévenez de ne pas l'essayer en production, cela ne vaut pas la peine d'être publié.
Stan Shaw du

9
Je ne suis pas d'accord avec les downvoters - c'est une option. Les administrateurs ont juste besoin de comprendre leur scénario. Par exemple - il n'y aura pas de données «non validées» s'il n'y a pas de transactions ouvertes.
Gerard ONeill

3
C'est la seule solution qui a fonctionné pour moi. Mon disque était plein et je n'ai pas pu sauvegarder ou rétrécir et rien d'autre ne semblait fonctionner. Je vous remercie!
Brian

3
Je suis d'accord; ce n'est pas une meilleure pratique, mais c'est un outil précieux à avoir si vous n'avez pas d'autres options telles que le scénario de Brian.
ScottFoster1000
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.