KB2967240 – ÅTGÄRDAT: Det går inte att frigöra oanvänt utrymme med hjälp av krympning i tabellen som innehåller en LOB-kolumn i SQL Server

Gäller för
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

Symptom

Anta att du har en tabell som innehåller en kolumn med stort objekt (LOB) i Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 eller SQL Server 2014. När du uppdaterar kolumnen LOB med mindre storlek på LOB-data och försöker frigöra det oanvända utrymmet med följande metoder:

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

I det här fallet går det inte att frigöra det oanvända utrymmet.

Lösning

Problemet åtgärdades först i följande kumulativa uppdatering av SQL Server.

Kumulativ uppdatering 2 för SQL Server 2012 SP2 /en-us/help/2983175

Kumulativ uppdatering 11 för SQL Server 2012 SP1 /en-us/help/2975396

Kumulativ uppdatering 13 för SQL Server 2008 R2 SP2 /en-us/help/2967540

Kumulativ uppdatering 2 för SQL Server 2014 /en-us/help/2967546

Kumulativ uppdatering 17 för SQL Server 2008 SP3 /en-us/help/2958696

Om kumulativa uppdateringar för SQL Server

Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som ingick i den tidigare kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:

      

Lösning

Använd följande lösningar för att kringgå problemet:

  • Exportera alla rader till en ny tabell och flytta tillbaka raderna. Detta omorganiserar verksamhetsspecifika data och frigör oanvänt utrymme.
  • Använd DBCC SHRINKFILE med alternativet EMPTYFILE för att flytta alla data till en nyligen tillagd datafil och sedan ta bort den gamla datafilen. Detta omorganiserar affärsdata där genom att frigöra oanvänt utrymme.

Mer information

I följande exempel visas det oanvända utrymmet med hjälp av TSQL-kommandot sp_spaceused "table_name" före och efter att du uppdaterar LOB-kolumnen med mindre storlek på LOB-data:
Innan du uppdaterar:

namn rader reserverad data index_size oanvänd
table_name 1 000 261072 kB 261056 kB 16 kB 0 kB

När du uppdaterar:

namn rader reserverad data index_size oanvänd
table_name 1 000 261072 kB 199672 kB 16 kB 61384 KB

      

Status

Microsoft har bekräftat att detta är ett problem i de Microsoft-produkter som anges i avsnittet "Gäller".