Sql-Server
DBCC Shrinkfile 不適用於 SQL 2016
DBCC Shrinkfile('file1',emptyfile)
在文件組中的第一個文件上成功執行並刪除了我縮小的文件。對文件 2執行
DBCC ShrinkFile('file2',emptyfile)
不成功。文件 2 與 file1 位於同一文件組中。結果 2555 錯誤:無法將文件“file2”的所有內容移動到其他地方以完成空文件操作。
重新啟動 SQL,從第 2 點執行腳本,結果相同。
我最終試圖刪除該文件所屬的文件組,並且該文件組中只有一個剩余文件。該文件的目前分配空間為 1 MB,可用空間為 0.81 MB
如果它說文件不為空,則它不為空。您需要弄清楚那裡有什麼,然後手動在另一個文件組上重建它,或者將其刪除。
EMPTYFILE
如果根本沒有對象,則僅適用於最後一個文件,當然這在文件組上是不可能的PRIMARY
。我的第一個猜測是有一個表、索引或分區方案仍然與這個文件組相關聯:
DECLARE @fgid int; SELECT @fgid = data_space_id FROM sys.filegroups WHERE name = N'smoochies'; SELECT [object] = o.name, [index] = i.name FROM sys.objects AS o INNER JOIN sys.indexes AS i ON o.[object_id] = i.[object_id] WHERE i.data_space_id = @fgid OR i.data_space_id IN ( SELECT partition_scheme_id FROM sys.destination_data_spaces AS ds WHERE data_space_id = @fgid ); SELECT ps.name FROM sys.destination_data_spaces AS ds INNER JOIN sys.partition_schemes AS ps ON ds.partition_scheme_id = ps.data_space_id WHERE ds.data_space_id = @fgid GROUP BY ps.name;
當你找到這個東西時(它可能是一個空表上的索引、一個空堆,或者只是一個仍在引用你要刪除的文件組的分區方案),你必須刪除/重建/轉移對像到一個新的分區方案。如果目前引用的分區是“永久”分區(先入
RANGE RIGHT
或後入RANGE LEFT
),請參閱此答案。
“emptyfile”選項實際上將所有數據從指定文件遷移到同一文件組中的其他文件。
換句話說,EMPTYFILE 將數據從指定文件遷移到同一文件組中的其他文件。
我的猜測是你的“file2”是這個文件組中唯一剩下的文件,這可能就是你不能清空它的原因。
在刪除它之前確保沒有任何東西在使用它