版本相容性鐵律
- SQL 7.0 / 2000 / 2005 / 2008 / 2012 / 2014 / 2016 / 2017 / 2019 / 2022:支援**就地升級**、**備份/還原**、**附加/分離** 向上相容 (舊版備份→新版還原)。
- SQL 6.5 / 6.0 / 4.21 及更早:**不支援直接備份還原或附加**。引擎架構、系統表結構、儲存格式均有根本性重寫 (7.0 重大重構)。
舊版本 (SQL 6.5 及之前) 遷移路徑
- 資料移轉 (Data Migration):在舊版伺服器建立 ODBC DSN,使用 **DTS (SQL 2000) / SSIS (2005+)** 封裝抽取→轉換→載入 (ETL) 至新版資料庫。
- BCP (大量複製程式):`bcp db.dbo.table out file.dat -c -T -S OldSrv` → `bcp newdb.dbo.table in file.dat -c -T -S NewSrv`。適合純資料大量移動,需自行處理結構建立。
- 腳本產生 + BCP:舊版 Enterprise Manager 產生結構腳本 → 新版執行建表 → BCP 導入資料。
若僅有舊版備份檔 (`.bak`),**必須**先還原至相同版本伺服器 (或安裝舊版),再走上述移轉流程。無捷徑可直接從舊版備份「跳躍」還原至新版。
SQL 7.0 及以後版本間遷移 (三大標準法)
方法一:備份/還原 (最常用、最完整)
-- 舊版
BACKUP DATABASE MyDB TO DISK = 'D:\Bak\MyDB.bak' WITH INIT, STATS=5;
-- 新版 (可跨版本還原,如 2000→2005→2019)
RESTORE DATABASE MyDB FROM DISK = 'D:\Bak\MyDB.bak'
WITH MOVE 'MyDB_Data' TO 'D:\Data\MyDB.mdf',
MOVE 'MyDB_Log' TO 'L:\Log\MyDB.ldf',
REPLACE, STATS=5;
- 保留所有物件、權限、統計資料、全文索引 (2005+)。
- 還原後**必須**執行:`DBCC CHECKDB`、`UPDATE STATISTICS`、`ALTER DATABASE SET COMPATIBILITY_LEVEL` (視應用需求)。
方法二:附加/分離 (檔案層級移動,極快)
-- 舊版
EXEC sp_detach_db 'MyDB';
-- 複製 .mdf/.ldf 至新伺服器磁碟
-- 新版
EXEC sp_attach_db @dbname = 'MyDB',
@filename1 = 'D:\Data\MyDB.mdf',
@filename2 = 'L:\Log\MyDB.ldf';
- 前提:資料庫**無使用中連線**、檔案系統權限正確 (服務帳號讀寫)。
- 跨版本附加自動完成內部升級 (系統表轉換),不可逆。
方法三:產生腳本 + 資料匯入 (精細控制、跨版本結構調整)
- SSMS → 右鍵資料庫 → 「工作」→「產生指令碼」→ 選「為目標版本編寫腳本」(如 SQL 2000/2005/2008)。
- 新版執行腳本建立空結構 → 「匯入/匯出精靈」或 SSIS 導入資料。
- 適用:需調整資料類型、移除舊版特有語法、分階段遷移。
系統資料庫遷移鐵律:不可跨版本還原/附加
- `master`、`model`、`msdb`、`tempdb`、**不可**從舊版備份還原至新版,或直接附加舊版檔案。
- 新版安裝會建立全新系統資料庫結構 (新系統表、新目錄檢視、新預存程序)。
- 僅能**手工遷移**內容:登入/使用者 (sp_help_revlogin)、Agent 作業/警示/排程、備份/維護計劃歷程、連結伺服器定義等。
遷移後必做清單
- `DBCC CHECKDB (MyDB) WITH NO_INFOMSGS, ALL_ERRORMSGS;` 確保結構完整。
- 更新統計資料:`EXEC sp_updatestats;` 或 `UPDATE STATISTICS` 配合 `FULLSCAN`。
- 同步登入與使用者 (SID 映射):執行 `sp_change_users_login 'Auto_Fix', 'user'` 或 `sp_help_revlogin` 跨伺服器同步。
- 調整相容性等級:`ALTER DATABASE MyDB SET COMPATIBILITY_LEVEL = 130;` (視應用測試決定)。
- 重建/重組索引、啟用查詢存放區 (2016+)、驗證應用功能。