有時我們會在FileGroup中建立多個File檔案來分散磁碟的IO壓力
,但如果要移除FileGroup中的某一個檔案該怎麼做呢 ? 如果我們
採用SSMS的UI來做,可是會發生錯誤歐。
首先我們先建立一個資料庫[MyDB],然後該DB的Primary FileGroup有兩個實體檔案MyDB.mdf及MyDB1.ndf (如下圖)。
在下圖中可以看見該DB實體檔案MyDB.mdf及MyDB1.ndf。
我們在該資料庫中建立一張Table叫tb1並寫入大量資料。
如下圖所示tb1中有32768筆資料
我們可以透過下面語法查出tb1資料表在兩個Data File中各使用了多少空間。由下圖可看見MyDB.mdf用了400KB而MyDB1.ndf用了384KB。
假如我們想刪除Primary中MyDB1的這一個檔案,SSMS的UI介面如下圖所示。我們點選MyDB1然後按下刪除紐。
Oh Oh刪除檔案發生錯誤,由錯誤訊息看來是因為MyDB1還有資料,所以不允許刪除。
那我們該怎麼做呢? 首先我們先讓MyDB1.ndf停止成長,這樣一來就不會有資料再被寫入該檔案。接下來就用DBCC ShrinkFile來清空該Data File,注意要用EmptyFile這一個引數才能清空該檔案。完成ShrinkFile後,如下圖紅色圈選處可以看見UsedPages降為0了。
完成上述步驟後我們可以由下圖中看見tb1資料表已全部搬移到MyDB.mdf,占了776KB的空間。
ㄧ旦清空資料,我們就可以用Alter Database [MyDB] Remove File [MyDB1]指令刪掉檔案了。
我是ROCK
rockchang@mails.fju.edu.tw