Symptômes
Supposons que vous disposez d’une table contenant une colonne d’objets volumineux dans Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 ou SQL Server 2014. Lorsque vous mettez à jour la colonne LOB avec une taille inférieure de données LOB et que vous essayez de récupérer l’espace inutilisé en utilisant les méthodes suivantes :
- DBCC SHRINKDATABASE / DBCC SHRINKFILE
- ALTER INDEX REORGANIZE WITH (LOB_COMPACTION = ON)
Dans ce cas, l’espace inutilisé ne peut pas être récupéré.
Résolution
Le problème a été résolu pour la première fois dans la mise à jour cumulative suivante de SQL Server.
Mise à jour cumulative 2 pour SQL Server 2012 SP2 /en-us/help/2983175
Mise à jour cumulative 11 pour SQL Server 2012 SP1 /en-us/help/2975396
Mise à jour cumulative 13 pour SQL Server 2008 R2 SP2 /en-us/help/2967540
Mise à jour cumulative 2 pour SQL Server 2014 /en-us/help/2967546
Mise à jour cumulative 17 pour SQL Server 2008 SP3 /en-us/help/2958696
À propos des mises à jour cumulatives pour SQL Server
Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :
- Dernière mise à jour cumulative pour SQL Server 2012 SP2
- Dernière mise à jour cumulative pour SQL Server 2012 SP1
- Dernière mise à jour cumulative pour SQL Server 2008 R2 SP2
- Dernière mise à jour cumulative pour SQL Server 2014
- Dernière mise à jour cumulative pour SQL Server 2008 SP3
Solution de contournement
Pour contourner ce problème, appliquez les solutions suivantes :
- Exportez toutes les lignes vers une nouvelle table, puis replacez les lignes. Cela réorganise les données LOB et libère l’espace inutilisé.
- Utilisez DBCC SHRINKFILE avec l’option EMPTYFILE pour déplacer toutes les données vers un nouveau fichier de données, puis supprimer l’ancien fichier de données. Cela réorganise les données métier en libérant l’espace inutilisé.
Informations supplémentaires
L’exemple suivant vous montre l’espace inutilisé à l’aide de la commande TSQL sp_spaceused « table_name » avant et après la mise à jour de la colonne LOB avec des données LOB de plus petite taille :
Avant de procéder à la mise à jour :
| nom | lignes | Réservé | de diffusion en continu | index_size | Non utilisé |
|---|---|---|---|---|---|
| table_name | 1000 | 261072 Ko | 261056 Ko | 16 Ko | 0 KO |
Après la mise à jour :
| nom | lignes | Réservé | de diffusion en continu | index_size | Non utilisé |
|---|---|---|---|---|---|
| table_name | 1000 | 261072 Ko | 199672 Ko | 16 Ko | 61384 Ko |
État
Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».