[SQL]如何移除 tempdb 的資料檔呢 ?

刪除資料檔一般來說清空資料檔後就可以刪除了,但 tempdb 似乎沒有辦法這麼容易處理,那該怎麼辦呢 ?

在課程中遇到學生提出一個問題,如果在一開始安裝 SQL Server 的時候沒有注意到,造成 tempdb 的資料檔案過多時,該怎麼來刪除資料檔呢 ? 看起來應該是個簡單問題,但似乎又沒有那麼單純,因此就弄個 Lab 來測試看看。

首先,在我們測試環境中,一開始安裝的時候指定 tempdb 有八個資料檔案,因此安裝完成後,我們就使用 ALTER DATABASE 的指令來搭配 REMOVE FILE 的參數,但這樣執行的話就可能會如下圖般一樣,因為資料檔並不是空的,因此無法來做刪除。

那要將資料檔給清空的話,我們就可以使用 DBCC SHRINKFILE 來搭配 EMPTYFILE 的參數。一般情況下都沒有問題,但是遇到 tempdb 的時候,就會像是下圖的狀況,顯示出錯誤代號 2555 的訊息,無法讓我們順利去清空檔案,那這下該如何來刪除資料檔呢 ?

其實在這個時候,您只要搭配 DBCC FREEPROCCACHE 的指令,就可以解決上述的問題了。因此當我們執行完 DBCC FREEPROCCACHE 的指令完畢之後,再重新執行 DBCC SHRINKFILE 的指令,就可以正常執行了,因此我們可以類似以下的指令,把所有要移除的檔案,都使用 DBCC SHRINKFILE 的指令去清空。

當清空完畢之後,再重新使用 ALTER DATABASE 的指令,就可以很方便的清除資料檔了。

這樣我們就可以順利地又解決一個「簡單任務」囉 !