擁有完整的資料庫資料檔(.mdf)與記錄檔(.ldf),需在同版本或更高版本的 SQL Server 實例上快速掛載為線上資料庫。常見於硬體遷移、測試環境複製、災難恢復演練。
EXEC sp_attach_db
@dbname = N'MyDatabase',
@filename1 = N'D:\MSSQL\Data\MyDatabase_Data.mdf',
@filename2 = N'D:\MSSQL\Data\MyDatabase_Log.ldf';
-- 若有多個次要資料檔(.ndf),依序加入 @filename3, @filename4 ...
sp_detach_db 分離)。複製 所有 .mdf、.ndf、.ldf 檔案至目標伺服器對應路徑。sp_attach_db 指令。SELECT name, state_desc FROM sys.databases WHERE name = 'MyDatabase'; 應顯示 ONLINE。執行 DBCC CHECKDB('MyDatabase') 驗證一致性。EXEC sp_detach_db @dbname = N'MyDatabase'; -- 先確保已分離
EXEC sp_attach_single_file_db
@dbname = N'MyDatabase',
@physname = N'D:\MSSQL\Data\MyDatabase_Data.mdf';
效果: SQL Server 自動建立新的記錄檔(預設 1 MB,自動成長)。警告: 原有記錄檔內未提交/未檢查點的交易將遺失,資料庫可能處於交易不一致狀態,僅限非生產、可接受資料遺失環境使用。
| 錯誤訊息 | 原因 | 解決 |
|---|---|---|
| 無法開啟實體檔案 / Access denied | 服務帳號無 NTFS 權限 | 授予服務帳號資料夾「修改」權限 |
| 版本不相容 / The database was created with a different version | 來源版本高於目標版本 | 目標版本需 ≥ 來源版本;不支援降級附加 |
| 檔案啟用錯誤 / Device activation error | 路徑錯誤、檔案遺失、記錄檔不匹配 | 核對所有檔案路徑、確認檔案完整 |
| 資料庫已存在 | 同名資料庫未卸載 | 先 DROP DATABASE 或 sp_detach_db |
sp_attach_db 仍支援但標記為淘汰,建議改用 CREATE DATABASE ... FOR ATTACH / FOR ATTACH_REBUILD_LOG。FILESTREAM、FileTable、In-Memory OLTP 檔案群組附加,語法相同但需對應檔案群組路徑。DBCC CHECKDB 無誤。EXEC sp_updatestats;EXEC sp_change_users_login 'Report'; → 'Auto_Fix' 修復。