首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 資料庫分離與附加完整操作指南:移動資料檔、跨伺服器遷移、版本升級

     編輯:關於SqlServer

**分離** 與 **附加** 是 SQL Server 移動資料庫檔案 (MDF/LDF)、跨伺服器遷移、版本升級、磁碟重組的核心技術。操作簡單、停機時間短、保留完整資料與中繼資料 (權限、索引、統計、觸發器等)。

適用場景

  • 資料/記錄檔從系統盤 (C:) 移至資料盤 (D:/E:/SAN) 平衡 I/O。
  • 將資料庫複製至另一台伺服器 (相同/較高版本) 作為開發/測試/報表副本。
  • 就地升級:分離舊版 → 安裝新版 → 附加 (資料庫自動升級)。
  • 檔案層級備份/還原替代方案 (需停機)。

一、分離資料庫 (Detach)

前置條件

  • **無作用中連接**:`sp_who2` 或 `sys.dm_exec_sessions` 確認該資料庫 `session_id` 為 0。
  • 若有連接,可勾選「更新統計資料」或**強制中斷連接** (SSMS 分離對話框 → 「卸除連接」)。
  • 資料庫不在**複寫發佈/訂閱**、不在**鏡像/AlwaysOn** 角色中 (需先移除)。
  • 非系統資料庫 (master/model/msdb/tempdb 不可分離)。

SSMS 圖形化操作

  1. SSMS → 物件總管 → 展開「資料庫」→ 右鍵目標資料庫 → **工作** → **分離**。
  2. 對話框選項:
    • 卸除連接:強制中斷所有現有連接 (謹慎使用,會回滾未提交交易)。
    • 更新統計資料:分離前執行 `sp_updatestats`,建議勾選。
  3. 點擊「確定」,資料庫從 SSMS 消失,**MDF/LDF/NDF 檔案保留在原路徑**。

T-SQL 等價指令

USE master;
GO
-- 強制單一使用者模式並立即回滾
ALTER DATABASE [MyDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 分離
EXEC sp_detach_db 'MyDB', 'true';  -- 'true' = 更新統計資料
GO

二、附加資料庫 (Attach)

前置準備

  • 將 **所有資料檔 (.mdf、.ndf) 與記錄檔 (.ldf)** 複製/移動至目標伺服器**目標路徑** (本地磁碟、SAN、本地連接儲存,**不支援網路共享路徑**)。
  • 確保 SQL Server 服務帳號對目標資料夾具備 **讀寫/修改 NTFS 權限**。
  • 目標伺服器版本 **≥ 來源版本** (支援就地升級,不支援降級)。

SSMS 圖形化操作

  1. SSMS → 物件總管 → 右鍵「資料庫」→ **附加**。
  2. 點擊「加入」→ 選擇 `.mdf` 主檔案 → 下方面板自動列出關聯的 `.ldf`/`.ndf`,若路徑異動可手動修正。
  3. 「附加為」輸入新資料庫名稱 (不可與現有重複)。
  4. 「擁有者」指定登入帳號 (預設 `sa`)。
  5. 點擊「確定」,資料庫出現在物件總管,狀態正常。

T-SQL 等價指令

CREATE DATABASE [MyDB] ON 
(FILENAME = N'D:\SQLData\MyDB.mdf'),
(FILENAME = N'D:\SQLLog\MyDB_log.ldf')
FOR ATTACH;
GO
-- 若記錄檔遺失/損毀,可嘗試重建記錄檔 (僅限乾淨關閉)
-- CREATE DATABASE [MyDB] ON (FILENAME = N'D:\SQLData\MyDB.mdf') FOR ATTACH_REBUILD_LOG;

三、常見問題與避坑指南

問題原因與解決
分離失敗「資料庫正在使用中」檢查 `sys.dm_exec_sessions`、`sp_who2`;關閉應用程式連接池、停止 Agent 作業、停用複寫/鏡像;或勾選「卸除連接」。
附加後資料庫標示「疑似損毀」檔案複製不完整、來源資料庫未乾淨關閉、版本不相容 (來源版本 > 目標版本)。檢查 ERRORLOG、嘗試 `DBCC CHECKDB`。
附加報錯「找不到記錄檔」若資料庫乾淨關閉,可用 `FOR ATTACH_REBUILD_LOG` 重建記錄檔;否則需從備份還原。
權限錯誤「存取被拒」SQL Server 服務帳號 (或啟用服務 SID `NT SERVICE\MSSQLSERVER`) 無目標資料夾 NTFS 權限。授予 `Modify` 權限。
全文檢索目錄遺失全文目錄不在資料庫檔案中,需單獨遷移或重建全文索引。
Filestream 資料遺失Filestream 資料容器 (資料夾結構) 必須隨 MDF/LDF 一起移動,且路徑相對關係保持一致。

四、分離/附加 vs 備份/還原:選型建議

維度分離/附加備份/還原
停機時間極短 (僅分離/附加瞬間)較長 (備份+複製+還原)
版本升級支援 (附加時自動升級)支援 (還原時自動升級)
檔案級操作直接移動檔案需備份裝置/檔案
時間點恢復不支援支援 (完整+記錄備份)
跨網路傳輸需先複製檔案可直接備份至網路共享
生產環境風險分離瞬間不可用、需強制中斷連接線上備份無停機 (完整模式)

建議:計畫性遷移/磁碟重組用 **分離/附加**;災難恢復/時間點恢復/跨網路異地備份用 **備份/還原**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved