web-dev-qa-db-fra.com

La réduction du fichier journal ne réduit pas la taille

J'ai une base de données qui a 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 4932 Mo et que l'espace utilisé pour le journal est 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 en 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 resoudre ceci?

24
Navaneet

Voici la réponse à ma propre question.

Exécutez la requête ci-dessous pour obtenir des informations sur l'attente de réutilisation du fichier journal:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

J'ai obtenu la sortie suivante:

log_reuse_wait_desc
-------------------
REPLICATION 

Il restait des objets liés à la réplication dans la base de données, même après la suppression de la réplication.

Pour supprimer la réplication de la base de données, sp_removedbreplication peut être utilisé. Mais cela n'a pas fonctionné pour nous car la réplication n'était pas active à l'époque et la réplication avait été supprimée bien avant.

La solution consistait à importer le contenu de la base de données dans une autre base de données à l'aide de l'option d'importation de SQL Server.

12
Navaneet

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 vous connectiez le dernier LSN pointez dans un VLF qui se trouve à la fin du LDF. Counter intuitivement, vous devez avancer le journal, en générant des écritures de journal, pour lui permettre de rétrécir.

10
Remus Rusanu

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

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

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

10
Cougar9000

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:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

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.

0
Toni Kostelac

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.

0
SQL King