Applies ToSQL 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

徵狀

假設您有一個表格,其中包含 Microsoft SQL Server 2008、SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 中的大型物件(LOB)資料行。 當您使用較小的 LOB 資料更新 LOB 欄,並嘗試使用下列方法回收未使用的空間:

  • DBCC SHRINKDATABASE/DBCC SHRINKFILE

  • 變更索引重組(LOB_COMPACTION = 開啟)

在這種情況下,無法回收未使用的空間。

每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:

因應措施

若要解決此問題,請使用下列因應措施:

  • 將所有資料列匯出至新資料表,然後將列移回。 這會重組 LOB 資料並釋放未使用的空間。

  • 使用 DBCC SHRINKFILE 搭配 EMPTYFILE 選項,將所有資料移至新加入的資料檔,然後移除舊的資料檔案。 這會透過釋放未使用的空間來重組 LOB 資料。

其他相關資訊

下列範例顯示在您使用較小的 LOB 資料更新 LOB 欄之前及之後,使用 TSQL 命令 sp_spaceused 「table_name 」所未使用的空間:更新之前:

列名

留給

資料

index_size

未使用

table_name

1000

261072 KB

261056 KB

16 KB

0 KB

更新後:

列名

留給

資料

index_size

未使用

table_name

1000

261072 KB

199672 KB

16 KB

61384 KB

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。