J'ai une base de données qui contient un fichier de données de 350 Mo (.mdf) et un fichier journal de 4,9 Go (.ldf). Le modèle de récupération est défini sur FULL
.
Lorsque j'essaie de réduire le fichier journal, il ne rétrécit pas.
Je sais que réduire une base de données n'est pas bon et cela ne devrait pas être fait. Mais j'essaie toujours de le faire pour réduire le fichier journal.
Quand j'ai couru
DBCC SQLPerf(logspace)
J'ai trouvé que la taille du journal est de 4932 Mo et que l'espace utilisé pour le journal est de 98,76% !
J'ai ensuite essayé cette commande
USE <databasename>;
DBCC loginfo;
Maintenant, presque tous les VLF ont le «statut 2», ce qui signifie que tous sont en cours d'utilisation.
J'ai essayé de faire une sauvegarde du journal, puis de réduire le fichier journal. Le rétrécissement n'a pas réduit la taille.
J'ai changé le modèle de récupération SIMPLE
et j'ai essayé de réduire à nouveau, mais cela n'a pas aidé non plus.
J'ai vérifié les transactions ouvertes
DBCC opentran (database);
et a constaté qu'aucune transaction n'est ouverte actuellement.
Qu'est-ce qui m'empêche de réduire le fichier journal? Comment puis-je résoudre ça?
log_reuse_wait_desc
a donnéACTIVE_TRANSACTION
. Dès que la transaction a été conclue, le retrait a très bien fonctionné.Les étapes pour réduire le journal vont être
Sauvegarder le journal des transactions via SSMS ou T-SQL, puis effectuer une réduction
les commandes pour SSMS sont sous les tâches si vous cliquez avec le bouton droit sur le nom de la base de données
Vous devrez probablement le faire plusieurs fois
Si une transaction ou un travail bloque l'action, utilisez le moniteur d'activité pour identifier le processus et le tuer, ou utilisez le moniteur d'activité du travail de l'Agent SQL pour terminer le travail.
source: http://support.microsoft.com/kb/907511
la source
Lisez Comment réduire le journal SQL Server pour une explication sur la façon dont la nature circulaire du journal peut empêcher la réduction après la troncature. Il est possible que vous connectiez le dernier point LSN de votre VLF à la fin du LDF. Contre intuitivement, vous devez faire avancer le journal, en générant des écritures de journal, pour lui permettre de rétrécir.
la source
Vous devez d'abord créer une sauvegarde, en fonction du modèle de sauvegarde configuré pour la base de données avant de pouvoir réduire la base de données.
Vous pouvez essayer d'exécuter ceci:
Ou vous pouvez le faire à partir de SSMS et utiliser les outils graphiques disponibles (voir ici pour plus de détails: http://msdn.microsoft.com/en-us/library/ms187510.aspx )
Une fois que vous avez sauvegardé votre base de données, vous pouvez la compresser. Cependant, la réduction de la base de données n'est pas une bonne idée car une forte fragmentation d'index se produira et la recherche de données deviendra lente.
J'espère que cela t'aides.
la source
J'ai constaté que je dois effectuer 2 ou 3 sauvegardes de la base de données et du journal des transactions pour que le journal des transactions soit réellement réduit. J'ai une base de données qui a été créée avec le modèle de récupération complète. Chaque nuit, il effectue des sauvegardes de la base de données et du journal des transactions, mais inévitablement, le journal des transactions semble augmenter continuellement sur 2-3 semaines. Lorsque l'espace disque restant atteint 1 Go, je constate que le journal des transactions fait environ 30 Go. J'ai suivi les étapes recommandées par Microsoft et après la 4e ou la 5e itération de sauvegarde de la base de données et du journal des transactions, le journal des transactions libérera enfin son espace supplémentaire et se réduira. Ensuite, je reviens en arrière et supprime les multiples sauvegardes que j'ai créées.
la source
Mon travail autour de la réplication qui bloque la réduction du fichier journal est le suivant:
Dans mon cas, cela a fonctionné. Après avoir mis DB en ligne, le journal a été créé automatiquement et sa taille était de 512 Ko au lieu de 70 Go. Mais ce n'est qu'une solution de contournement. Le problème racine n'est pas résolu. Dans mon cas, nous utilisons la réplication.
la source