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

SQL Server 跨版本資料庫升級與遷移完整指南:分離附加、備份還原、資料移植、系統物件處理

     編輯:關於SqlServer

SQL Server 版本演進 (4.2 → 6.0/6.5 → 7.0 → 2000 → 2005 → 2008 → 2012/2014/2016/2017/2019/2022) 中,**7.0 為架構分水嶺** (儲存格式、系統表、查詢處理器全面重寫)。跨版本遷移策略隨版本差距而異。

版本相容性矩陣

來源版本目標版本直接附加/還原說明
7.0 / 2000 / 2005 / 2008 / 2012+較高版本✅ 支援備份還原或分離附加,附加/還原時自動升級內部結構
6.5 / 6.0 / 4.27.0+❌ 不支援儲存格式不相容,**必須資料移植** (匯出/匯入、BCP、SSIS/DTS、連結伺服器)
任何版本較低版本❌ 不支援不支援降級,需腳本化物件 + 資料移植

策略一:備份還原 (7.0+ 版本間首選)

-- 來源伺服器
BACKUP DATABASE [MyDB] TO DISK = 'D:\Backup\MyDB_Full.bak' WITH COMPRESSION, CHECKSUM;
-- 複製 .bak 至目標伺服器
-- 目標伺服器
RESTORE DATABASE [MyDB] FROM DISK = 'D:\Backup\MyDB_Full.bak'
WITH MOVE 'MyDB_Data' TO 'D:\Data\MyDB.mdf',
     MOVE 'MyDB_Log'  TO 'L:\Log\MyDB.ldf',
     REPLACE, STATS = 5;
  • **優點**:單一檔案、含所有物件/權限/統計、支援差異/記錄還原時間點恢復、可 `NORECOVERY` 搭配記錄傳送/鏡像初始化。
  • **注意**:目標版本**必須 ≥ 來源版本**;還原後執行 `DBCC CHECKDB`、`sp_updatestats`、調整相容性等級 (`ALTER DATABASE ... SET COMPATIBILITY_LEVEL`)。

策略二:分離附加 (檔案層級移動、快速)

-- 來源
EXEC sp_detach_db 'MyDB', 'true';
-- 複製 .mdf/.ldf 至目標路徑
-- 目標
CREATE DATABASE [MyDB] ON 
(FILENAME = 'D:\Data\MyDB.mdf'),
(FILENAME = 'L:\Log\MyDB.ldf')
FOR ATTACH;
  • **優點**:無備份檔案中間層、複製速度受限於磁碟/網路頻寬、適合大型資料庫 (TB 級) 遷移。
  • **限制**:來源資料庫**必須乾淨關閉** (分離前無作用中交易);目標版本 ≥ 來源版本;Filestream/全文目錄需同步移動。

策略三:資料移植 (6.5 及更早版本、跨平台、部分遷移)

  • BCP (Bulk Copy Program):`bcp "SELECT * FROM Table" queryout data.dat -c -t, -T -S SourceServer` → `bcp TargetDB.dbo.Table in data.dat -c -t, -T -S TargetServer`。高效、命令列自動化。
  • SSIS / DTS 套件:圖形化 ETL、支援轉換、查閱、錯誤流向、增量載入 (CDC)。
  • 連結伺服器 + INSERT...SELECT:`INSERT INTO TargetDB..Table SELECT * FROM LinkedServer.SourceDB..Table`。適合單次全量/增量同步。
  • 第三方工具:Redgate SQL Data Compare、Quest Toad、DBConvert、Azure Database Migration Service。

**必要步驟**:目標端預先建立 **Schema (DDL)** → 移植資料 → 建立索引/條件約束/觸發器 → 更新統計。

系統資料庫特殊處理:不可直接升級/還原

使用者與登入遷移:`sp_help_revlogin` 黃金腳本

-- 來源執行 (產生 CREATE LOGIN 腳本含 SID、密碼雜湊、預設資料庫、語言)
EXEC sp_help_revlogin;
-- 目標執行產生的腳本,保留 SID → 資料庫使用者自動對應,零孤立使用者。

升級後驗證清單

  1. `DBCC CHECKDB` 無錯誤。
  2. `sp_updatestats` 更新統計資料。
  3. 相容性等級調整至目標版本預設 (如 160 for 2022) 測試應用程式。
  4. 查詢存儲 / Query Store (2016+) 啟用並觀察計畫穩定性。
  5. 應用程式端到端功能測試、效能基線比對。
  6. 備份/維護/監控作業重新部署驗證。

雲端遷移延伸:Azure SQL / SQL MI / SQL VM

  • Azure Database Migration Service (DMS)**:線上/離線遷移、Schema/資料同步、評估報告。
  • BACPAC** (`.bacpac`):Schema + 資料封裝,支援 SSMS/SqlPackage 匯入匯出,**跨版本/跨平台 (On-prem ↔ Azure)** 通用格式。
  • 異地複寫 / 容錯移轉群組**:近即時同步、零停機切換。

跨版本遷移核心原則:**版本相容性先行判斷、備份還原優於分離附加優於資料移植、系統物件腳本化重建、升級後驗證閉環**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
系統資料庫處理方式
master重建登入 (`sp_help_revlogin` 腳本匯出 → 目標執行)、連結伺服器、配置選項、端點、憑證。
model手動同步範本物件、選項、權限。
msdbAgent 作業/排程/警示/操作員 → `sp_script_job`/`sp_help_job` 匯出腳本重建;備份歷程通常不遷移。
tempdb自動重建,僅需同步檔案數/大小/路徑配置腳本。
distribution重新設定複寫拓撲,不可直接遷移。