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.2 | 7.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)** → 移植資料 → 建立索引/條件約束/觸發器 → 更新統計。
系統資料庫特殊處理:不可直接升級/還原
| 系統資料庫 | 處理方式 |
| master | 重建登入 (`sp_help_revlogin` 腳本匯出 → 目標執行)、連結伺服器、配置選項、端點、憑證。 |
| model | 手動同步範本物件、選項、權限。 |
| msdb | Agent 作業/排程/警示/操作員 → `sp_script_job`/`sp_help_job` 匯出腳本重建;備份歷程通常不遷移。 |
| tempdb | 自動重建,僅需同步檔案數/大小/路徑配置腳本。 |
| distribution | 重新設定複寫拓撲,不可直接遷移。 |
使用者與登入遷移:`sp_help_revlogin` 黃金腳本
-- 來源執行 (產生 CREATE LOGIN 腳本含 SID、密碼雜湊、預設資料庫、語言)
EXEC sp_help_revlogin;
-- 目標執行產生的腳本,保留 SID → 資料庫使用者自動對應,零孤立使用者。
升級後驗證清單
- `DBCC CHECKDB` 無錯誤。
- `sp_updatestats` 更新統計資料。
- 相容性等級調整至目標版本預設 (如 160 for 2022) 測試應用程式。
- 查詢存儲 / Query Store (2016+) 啟用並觀察計畫穩定性。
- 應用程式端到端功能測試、效能基線比對。
- 備份/維護/監控作業重新部署驗證。
雲端遷移延伸:Azure SQL / SQL MI / SQL VM
- Azure Database Migration Service (DMS)**:線上/離線遷移、Schema/資料同步、評估報告。
- BACPAC** (`.bacpac`):Schema + 資料封裝,支援 SSMS/SqlPackage 匯入匯出,**跨版本/跨平台 (On-prem ↔ Azure)** 通用格式。
- 異地複寫 / 容錯移轉群組**:近即時同步、零停機切換。
跨版本遷移核心原則:**版本相容性先行判斷、備份還原優於分離附加優於資料移植、系統物件腳本化重建、升級後驗證閉環**。
- 上一篇文章: MaxDB 與 MySQL 互操作性指南:資料交換、同步管理器、工具鏈與遷移策略
- 下一篇文章: SQL Server 交易記錄檔暴增縮減實戰:SHRINKFILE 失效根因與分步縮減腳本
Copyright ©
程式碼之家 All Rights Reserved