Sql-Server

在磁碟空間不足的伺服器上收縮數據 MDF 文件

  • August 15, 2016

在繼續之前,我知道這樣做的缺點並且已經閱讀了許多相同的問題。但是由於我們在這裡有緊急需求,並且添加磁碟需要幾天時間,並且有問題的數據庫並不那麼重要,所以有沒有辦法可以從數據庫中釋放未使用的空間。

下面的螢幕截圖顯示未使用空間為 36 GB,但當我執行 sp_spaceused 時,它顯示未使用空間為 400 MB,但未分配更多。

在此處輸入圖像描述

我等了將近 4 個小時,試圖分塊縮小,但甚至沒有一個 MB 縮小。

有沒有辦法可以做到這一點,或者我該如何管理未分配的空間?

請指教。

sp_spaceused提供了 2 組數據:

  • DB 大小 + 未分配空間 - 這些數字包括:數據和日誌文件;- 數據庫內所有對象的預留空間的總統計;

我敢打賭,您的 36 GB 可用空間在日誌文件中。

對於實數,請使用以下查詢:

SELECT 
   f.file_id as "File Id",
   f.physical_name as "Physical Name",
   CAST(CAST(ROUND(f.Size/128.,3) as DECIMAL(16,3)) as VARCHAR(16)) AS SizeMB,
   CAST(CAST(ROUND(FILEPROPERTY(f.name, 'SpaceUsed')/128.,3) as DECIMAL(16,3)) as VARCHAR(16)) AS UsedSpaceMB,
   RIGHT('  ' + CAST(CAST((1 - FILEPROPERTY(f.name, 'SpaceUsed') * 1./ f.size) * 100 as DECIMAL(5,2)) as VARCHAR(6)),6) AS FreeSpacePrc
   ,  CASE f.file_id WHEN 2 THEN 'Log File' ELSE IsNull(g.name,'N/A') END as [File Group]
FROM sys.database_files as f with (nolock) 
LEFT JOIN sys.filegroups as g with (nolock) ON f.data_space_id = g.data_space_id

可能會發生您仍然有一些打開的事務,這些事務使您無法縮小單個文件。看看誰持有它們,關閉它們。如有必要,重新啟動伺服器。在沒有人訪問數據庫的情況下縮小單個文件。如有必要,暫時將其切換為單使用者:

ALTER DATABASE <Your database> SET SINGLE_USER

引用自:https://dba.stackexchange.com/questions/146685