KB2967240 . ИСПРАВЛЕНИЕ. Не удается освободить неиспользуемое пространство с помощью операции сжатия в таблице, содержащей столбец бизнес-объекта в SQL Server

Применяется к
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

Проблема

Предположим, что у вас есть таблица, содержащая столбец большого объекта (LOB) в Microsoft SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 или SQL Server 2014. При обновлении бизнес-столбца с данными бизнес-объекта меньшего размера и попытке освободить неиспользуемое пространство с помощью следующих методов:

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

В этой ситуации неиспользуемое пространство не может быть использовано.

Решение

Эта проблема была исправлена в следующем накопительном обновлении SQL Server.

Накопительный пакет обновления 2 для SQL Server 2012 с пакетом обновления 2 (SP2) /help/2983175

Накопительный пакет обновления 11 для SQL Server 2012 с пакетом обновления 1 (SP1) /help/2975396

Накопительный пакет обновления 13 для SQL Server 2008 R2 с пакетом обновления 2 (SP2) /help/2967540

Накопительный пакет обновления 2 для SQL Server 2014 года /en-us/help/2967546

Накопительный пакет обновления 17 для SQL Server 2008 с пакетом обновления 3 (SP3) /help/2958696

Сведения о накопительных обновлениях для SQL Server

Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:

      

Временное решение

Чтобы обойти эту проблему, используйте следующие обходные пути:

  • Экспортируйте все строки в новую таблицу и переместите строки обратно. Это реорганизует бизнес-данные и освобождает неиспользуемое пространство.
  • Используйте параметр DBCC SHRINKFILE с параметром EMPTYFILE, чтобы переместить все данные в только что добавленный файл данных, а затем удалить старый файл данных. Это реорганизует бизнес-данные, освобождая неиспользуемое пространство.

Дополнительные сведения

В следующем примере показано неиспользуемое пространство с помощью команды TSQL sp_spaceused "table_name" до и после обновления столбца бизнес-данных меньшего размера:
Перед обновлением:

имя строки Защищены данные index_size Неиспользуемые
table_name 1000 261072 КБ 261056 КБ 16 КБ 0 КБ

После обновления:

имя строки Защищены данные index_size Неиспользуемые
table_name 1000 261072 КБ 199672 КБ 16 КБ 61384 КБ

      

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».