KB2967240 – LØSNING: Kan ikke frigjøre ubrukt plass ved hjelp av krympeoperasjonen i tabellen som inneholder en LOB-kolonne i SQL Server

Gjelder for
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

Symptomer

La oss si at du har en tabell som inneholder en kolonne for store objekter (LOB) i Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 eller SQL Server 2014. Når du oppdaterer LOB-kolonnen med mindre størrelse på LOB-data og prøver å frigjøre den ubrukte plassen ved hjelp av følgende metoder:

  • DBCC SHRINKDATABASE / DBCC SHRINKFILE
  • ALTER INDEX REORGANIZE WITH (LOB_COMPACTION = ON)

I denne situasjonen kan ikke den ubrukte plassen gjenvinnes.

Oppløsning

Problemet ble først løst i den følgende kumulative oppdateringen av SQL Server.

Kumulativ oppdatering 2 for SQL Server 2012 SP2 /en-us/help/2983175

Kumulativ oppdatering 11 for SQL Server 2012 SP1 /en-us/help/2975396

Kumulativ oppdatering 13 for SQL Server 2008 R2 SP2 /en-us/help/2967540

Kumulativ oppdatering 2 for SQL Server 2014 /en-us/help/2967546

Kumulativ oppdatering 17 for SQL Server 2008 SP3 /en-us/help/2958696

Om kumulative oppdateringer for SQL Server

Hver nye kumulative oppdatering for SQL Server inneholder alle hurtigreparasjoner og alle sikkerhetsrettinger som fulgte med den forrige kumulative oppdateringen. Ta en titt på de nyeste kumulative oppdateringene for SQL Server:

      

Midlertidig løsning

Du kan omgå dette problemet ved å bruke følgende løsninger:

  • Eksporter alle radene til en ny tabell, og flytt radene tilbake. Dette omorganiserer LOB-dataene og frigjør den ubrukte plassen.
  • Bruk alternativet DBCC SHRINKFILE med EMPTYFILE for å flytte alle dataene til en datafil som nylig er lagt til, og fjern deretter den gamle datafilen. Dette omorganiserer LOB-dataene der ved å frigjøre ubrukt plass.

Mer informasjon

Følgende eksempel viser ubrukt plass ved hjelp av TSQL-kommandoen sp_spaceused «table_name» før og etter at du har oppdatert LOB-kolonnen med mindre størrelse på LOB-data:
Før du oppdaterer:

navn rader reservert data index_size ubrukt
table_name 1000 261072 kB 261056 KB 16 kB 0 kB

Etter at du har oppdatert:

navn rader reservert data index_size ubrukt
table_name 1000 261072 kB 199672 KB 16 kB 61384 KB

      

Status

Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen «Gjelder for».