Sql-Server
在磁碟空間不足的伺服器上收縮數據 MDF 文件
在繼續之前,我知道這樣做的缺點並且已經閱讀了許多相同的問題。但是由於我們在這裡有緊急需求,並且添加磁碟需要幾天時間,並且有問題的數據庫並不那麼重要,所以有沒有辦法可以從數據庫中釋放未使用的空間。
下面的螢幕截圖顯示未使用空間為 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