2009-11-12 3 views
0

J'ai une base de données dont le tlog a augmenté de 4,5 Go. La base de données est en mode de récupération complète et j'ai essayé plusieurs sauvegardes du journal des transactions couplées avec le fichier de réduction DBCC . Et ça ne rétrécira pas. Est-ce que quelqu'un a des idées?Impossible de réduire le journal des transactions, peu importe ce que je fais

Plusieurs transactions ont un statut = 2, mais il n'y a aucune transaction active dans la base de données. Je me demande pourquoi ils apparaissent encore avec status = 2.

+2

jeeeeeeeeeeeeeeeez! – JohnIdol

+1

Je m'excuse pour le gros vidage de journaux. – sharadov

+0

Veuillez supprimer le vidage car je ne peux pas éditer votre message. – Middletone

Répondre

0

Nous avions un travail d'écriture dans la base de données à partir d'un autre serveur lié. Il faisait d'énormes suppressions. Nous avons optimisé ce travail et avons réussi à réduire le fichier journal à 100 Mo.

Merci!

1

Si vous n'êtes pas réellement intéressé par le contenu du journal des transactions, exécutez la commande

BACKUP LOG dbname WITH NO_LOG 

puis exécutez DBCC SHRINKFILE

Edit: ne pas réaliser 2008 avait retiré les - nous Je ne fais que passer à ça. En 2008, vous devez temporairement définir le modèle de récupération sur simple, puis exécutez DBCC SHRINKFILE, puis remettez le modèle de récupération à Full. code ici:

http://www.uhleeka.com/blog/2009/08/sql-2008-shrink-log-file-size-with-no_lo/

+0

Les deux commandes WITH NO_LOG et WITH TRUNCATE_ONLY ont été supprimées dans SQL Server 2008. – sharadov

+0

Mise à jour avec une autre solution. – MartW

+0

J'ai essayé ça, n'a pas aidé. En fait, la base de données était simple lorsque le journal devenait vraiment volumineux à cause d'une importation de données. Donc, je suis passé à plein, a fait une sauvegarde complète et tlog, puis a couru un shrinkfile dbcc, tout cela n'a pas aidé. – sharadov

1

Vous avez probablement une des opérations suivantes:

  • une transaction non validée
  • une transaction orpheline
  • une longue opération en cours d'exécution (comme un defrag index/recréer, créer un index, checkdb, requête longue durée, etc.)
  • si vous utilisez la réplication, transa non répliquée ctions

Il y a d'autres possibilités aussi, mais this kb article donne un aperçu plus/toutes les raisons possibles et comment déterminer si/où/ce qu'ils sont, ainsi que quelques informations en plus bon de this kb article et this kb article (ce dernier on est un peu dépassé, mais la plupart s'applique toujours).

2
  • Utilisez DBCC OPENTRAN pour obtenir les transactions ouvertes
  • Quelle est le MDF? si elle est 5GB ou au-dessus, je laisse le fichier journal
  • Peut-être que le fichier journal doit être son grand
  • Quand il grandit, il fragmenter à nouveau
  • Jetez un oeil sur le site de Paul Randall. Il a écrit beaucoup du code t-log ...

Enfin, je considérerais attach/detach pour supprimer le fichier journal si vous êtes vraiment bloqué. Toutefois, ce n'est que si vous êtes désespéré ...

+1

Attention: Détacher la base de données, supprimer le fichier journal, puis essayer de joindre uniquement le MDF et de reconstruire le journal pourrait laisser votre base de données dans un état incohérent ou même corrompu. –

+0

@Aaron: Je sais, mais OP semble catégorique ... – gbn

1

Si SQL, puis effectuez une sauvegarde complète de la base de données puis sauvegardez le journal des transactions, puis réduisez la base de données. Pour une raison quelconque, il est préférable d'avoir la sauvegarde complète avant de tronquer le journal. Vous pourriez être en mesure de sortir avec un différentiel, mais voir si la première partie fonctionne.

+0

N'utilisez pas DBCC SHRINKDATABASE ou l'option de base de données shrink dans l'interface utilisateur. Si vous avez besoin de réduire un fichier individuel, il est préférable d'utiliser explicitement DBCC SHRINKFILE. Voir le site de Tibor: http://www.karaszi.com/SQLServer/info_dont_shrink.asp voir également les liens ici et les discussions: http://is.gd/4TnHZ –

Questions connexes