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

SQL Server 資料庫完整遷移實戰:附加法與備份還原法詳解

     編輯:關於SqlServer

方法一:離線附加遷移 (適用同版本、可停機)

  1. 來源端:停止 SQL Server 服務 → 複製 `.mdf`、`.ldf` 至目標機同路徑或指定路徑。
  2. 目標端:企業管理員 → 右鍵「資料庫」→「所有工作」→「附加資料庫」→ 選擇 MDF → 修改資料庫名稱 (如 `OldDB_Bak`)。
  3. 建立同名空資料庫 (使用預設值)。
  4. 安全性 → 登入 → 新增實際應用登入 → 對應資料庫 → 勾選 `db_owner`。
    關鍵: 附加後原登入與使用者 SID 可能不匹配 (孤立使用者),需重建登入並修復映射。
  5. 資料遷移:企業管理員 → 右鍵來源附加庫 (`OldDB_Bak`) →「所有工作」→「匯出資料」→ 選擇「在 SQL Server 資料庫之間複製物件和資料」→ 目標選新建空庫 → 完成。

方法二:備份還原遷移 (通用、跨版本相容)

  1. 來源端:企業管理員 → 右鍵資料庫 →「所有工作」→「備份資料庫」
    — 備份類型:完整
    — 目的地:磁碟 → 新增 `.bak` 檔案路徑
    — 選項:覆蓋現有媒體、檢查校驗和、繼續前驗證備份
  2. 若 `.bak` > 1GB,建議壓縮 (7-Zip) 傳輸。
  3. 目標端:若無同名庫先建立空庫 → 右鍵 →「所有工作」→「還原資料庫」
    — 從裝置 → 選擇 `.bak` → 確定
    — 選項:強制還原、保留複寫設定 (視需求)
  4. 若還原失敗提示「資料庫正在使用」:
    企業管理員 → 管理 → 目前活動 → 鎖/物件 → 找到資料庫 SPID → 查詢分析器 `KILL ` → 重試還原。

方法三:資料庫專案部署 (現代化、版本化)

使用 SSDT (SQL Server Data Tools) 建立資料庫專案 (`.sqlproj`),將結構納入 Git 版控,CI/CD 管線執行發布:

# Azure DevOps / GitHub Actions 範例
- task: SqlServerDacpacDeployment@1
  inputs:
    SqlServer: '$(sqlServer)'
    Database: '$(dbName)'
    DacpacFile: '$(Build.ArtifactStagingDirectory)/MyDb.dacpac'
    PublishProfile: 'MyDb.publish.xml'
    AdditionalArguments: '/p:BlockOnPossibleDataLoss=False'

優勢: 版本化、可重複、支援增量更新、自動處理相依順序、可預覽變更腳本。

遷移後驗證清單

項目檢查指令 / 動作
資料庫上線狀態`SELECT name, state_desc FROM sys.databases WHERE name = 'MyDB';`
使用者/登入映射`EXEC sp_change_users_login 'Report';` → `Auto_Fix` 修復孤立使用者
統計資料更新`EXEC sp_updatestats;`
完整性驗證`DBCC CHECKDB('MyDB') WITH NO_INFOMSGS;`
相容性等級`ALTER DATABASE MyDB SET COMPATIBILITY_LEVEL = 150;` (SQL 2019)
備份鏈完整性執行完整備份 → 還原驗證 `RESTORE VERIFYONLY`

常見坑點與對策

  • 孤立使用者: 附加/還原後 SID 不匹配 → `sp_change_users_login 'Auto_Fix', 'user', NULL, 'newpwd'` 或含 `SID` 的 `CREATE LOGIN`。
  • 檔案路徑不存在: 還原時用 `WITH MOVE` 指定新路徑:
    `RESTORE DATABASE MyDB FROM DISK='...' WITH MOVE 'MyDB_Data' TO 'D:\Data\MyDB.mdf', MOVE 'MyDB_Log' TO 'L:\Log\MyDB.ldf', REPLACE;`
  • 版本降級不可行: 高版本備份無法在低版本還原;需用腳本/專案重建。
  • 大型資料庫還原耗時: 啟用瞬間檔案初始化、使用多條備份條帶 (Stripe)、考慮檔案群組分頁還原。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved