KB2967240 - CORRECTIF : impossible de récupérer l’espace inutilisé en utilisant l’opération de réduction dans la table qui contient une colonne LOB dans SQL Server

S’applique à
SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

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 :

      

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 à ».