J'ai une très grande base de données (50+ Go). Afin de libérer de l'espace sur mon disque dur, j'ai essayé de supprimer les anciens enregistrements de l'une des tables. J'ai lancé la commande:
delete from Table1 where TheDate<'2004-01-01';
Cependant, SQL Server 2012 a déclaré:
Msg 9002, Level 17, State 4, Line 1
The transaction log for database 'MyDb' is full due to 'ACTIVE_TRANSACTION'.
et il n'a pas supprimé une chose. Que signifie ce message? Comment puis-je supprimer les enregistrements?
Voici ce que j'ai fini par faire pour contourner l'erreur.
Tout d’abord, j’ai configuré le modèle de récupération de base de données sur SIMPLE. Plus d'informations ici .
Ensuite, en supprimant d'anciens fichiers, j'ai pu libérer 5 Go d'espace libre, ce qui donnait au fichier journal plus d'espace pour se développer.
Je répète l'instruction DELETE avec succès sans aucun avertissement.
Je pensais qu'en exécutant l'instruction DELETE, la base de données deviendrait immédiatement plus petite, libérant ainsi de l'espace sur mon disque dur. Mais ce n'était pas vrai. L'espace libéré après une instruction DELETE n'est pas renvoyé immédiatement au système d'exploitation, sauf si vous exécutez la commande suivante:
DBCC SHRINKDATABASE (MyDb, 0);
GO
Plus d'informations sur cette commande ici .
Le redémarrage de SQL Server effacera l'espace de journal utilisé par votre base de données. Si ce n'est cependant pas une option, vous pouvez essayer les solutions suivantes:
* Issue a CHECKPOINT command to free up log space in the log file.
* Check the available log space with DBCC SQLPERF('logspace'). If only a small
percentage of your log file is actually been used, you can try a DBCC SHRINKFILE
command. This can however possibly introduce corruption in your database.
* If you have another drive with space available you can try to add a file there in
order to get enough space to attempt to resolve the issue.
J'espère que cela vous aidera à trouver votre solution.