資料庫附加 是將分離或備份的 .mdf (資料檔) 與 .ldf (記錄檔) 重新掛載至 SQL Server 實例的操作。適用於伺服器遷移、版本升級、測試環境部署等場景。本文詳述標準操作步驟、常見錯誤與解決方案。
C:\Program Files\Microsoft SQL Server\MSSQL\Data\.mdf 主檔案,系統自動關聯同目錄下的 .ldfsa 或專用應用帳號)CREATE DATABASE [MyDatabase] ON
( FILENAME = N'D:\SQLData\MyDatabase.mdf' ),
( FILENAME = N'D:\SQLLog\MyDatabase_log.ldf' )
FOR ATTACH;
僅有 .mdf 檔案時 (記錄檔遺失/損毀):
CREATE DATABASE [MyDatabase] ON
( FILENAME = N'D:\SQLData\MyDatabase.mdf' )
FOR ATTACH_REBUILD_LOG;
會自動建立新的空記錄檔,但會丟失未提交的交易,僅限非生產環境或已接受資料損失風險時使用。
| 錯誤訊息 | 原因 | 解決方案 |
|---|---|---|
| Access denied / 拒絕存取 | SQL Server 服務帳號無檔案讀寫權限 | 授予服務帳號資料夾完整控制權限,或移至預設 Data 目錄 |
| Database 'xxx' already exists | 資料庫名稱衝突 | 指定不同的「附加為」名稱,或先刪除/重命名現有資料庫 |
| Log file 'xxx' does not match | .mdf 與 .ldf 版本不符 (可能來自不同備份時間點) | 確保成對檔案來自同一次分離/備份操作 |
| Version mismatch / 版本不相容 | 嘗試將高版本 (如 2019) 檔案附加到低版本 (如 2016) | 不支援降級附加,需相同或更高版本實例 |
| File activation failure | .ldf 路徑錯誤或檔案遺失 | 在附加對話框手動修正 .ldf 路徑,或使用 ATTACH_REBUILD_LOG |
DBCC CHECKDB('MyDatabase') WITH NO_INFOMSGS - 檢查邏輯/物理完整性SELECT compatibility_level FROM sys.databases WHERE name='MyDatabase',必要時調整EXEC sp_updatestats - 遷移後統計資料可能過時EXEC sp_change_users_login 'Report',修復登入映射| 特性 | 分離/附加 | 備份/還原 |
|---|---|---|
| 適用場景 | 檔案層級移動、同版本實例間遷移 | 跨版本、跨機器、災難恢復、定期備份 |
| 資料一致性 | 需確保資料庫離線/分離時一致 | 備份過程保證交易一致性 |
| 檔案大小 | 原始大小 | 可壓縮、可差異備份 |
| 權限需求 | 檔案系統權限 | 僅需 SQL Server 權限 |
掌握附加操作細節與風險點,讓資料庫遷移與部署更加從容可控。