刪除資料庫,要先確認資料庫有沒有在使用
👉 不能直接刪除正在使用中的檔案,所以刪之前必須先確保:
資料檔內沒有資料(資料要先搬走)
或該檔案尚未被實際使用(剛加還沒用,就能直接刪)
-- 從資料庫 testdb 中移除資料檔 DB3.ndf
ALTER DATABASE testdb
REMOVE FILE DB3;
項目 說明
DB3 是邏輯名稱 不是檔案名稱 DB3.ndf,而是建立時指定的 NAME = DB3
檔案不能有資料 若該檔案有資料,執行會失敗,必須先移轉資料到其他檔案群組
初學者常見錯誤 以為可以直接刪除 .ndf 檔案的檔名,其實要用邏輯名稱
刪除剛才新增的資料檔案 DB3.NDF,用的是 ALTER DATABASE 搭配 REMOVE FILE 語法。
若出現:
The file 'DB3' cannot be removed because it is not empty.
代表你必須先將資料移走或壓縮合併到其他檔案,例如使用:
DBCC SHRINKFILE (DB3, EMPTYFILE);
這會把資料從 DB3 搬走到其他檔案中,之後才能刪除。
在新增資料庫後,系統會放一些資料進去,就會刪不掉,就是 SQL Server 的「自動分配資料」機制在運作。
當你建立資料庫後,SQL Server 會:
根據你定義的檔案群組(尤其是 PRIMARY)來「平衡儲存」
自動選擇某個檔案來寫入資料
如果你新增一個 .ndf 檔,它也可能被系統拿來寫資料
✅ 如果你一新增完 DB3.ndf 就馬上刪除(沒使用過),就能順利刪除
❌ 如果你有執行過一些 INSERT / CREATE TABLE 等動作,SQL Server 可能會寫資料進去 DB3.ndf,這時就不能直接刪了!
-- 將 DB3 資料搬出
DBCC SHRINKFILE (DB3, EMPTYFILE);
GO
-- 移除 DB3 資料檔
ALTER DATABASE testdb
REMOVE FILE DB3;
-- 檢查資料庫中的檔案資訊
USE testdb;
GO
SELECT name, physical_name, type_desc, size
FROM sys.database_files;
這可以幫助你確認哪個檔案還有資料、是哪一種檔案(資料 or log)。