某時,創建了多個tempDB文件,已經超過了服務器核心數,現象刪除tempDB文件,使其保持與CPU核心數相同。但是在刪除的時候,發現無法刪除,報出錯誤:無法刪除文件“tempdev3”,因為它不能為空(Microsoft SQL Server,錯誤:5042)
此時,使用腳本查看數據和日志文件使用情況:
SELECT DB_NAME() AS DbName, name AS FileName, size/128.0 AS CurrentSizeMB, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS INT)/128.0 AS FreeSpaceMB FROM sys.database_files;
可以看到tempdev3這個文件已經被占用了一部分空間,在實際生產中,可能每個文件都會被占用,這里只做實驗用。
面對這種情況,就需要對tempdb中tempdev3這個文件進行收縮,在收縮前,需要確保此文件里不會有臨時表等臨時文件,因此需要將這些全部刪除之后再進行收縮,收縮腳本:
USE tempdb GO DBCC SHRINKFILE (tempdev3, EMPTYFILE); -- to empty "tempdev3" data file GO
收縮完畢之后,將該文件刪除,腳本如下:
ALTER DATABASE tempdb REMOVE FILE tempdev3; --to delete "tempdev3" data file GO
以上就完全刪除了tempdb中多余的文件。