資料庫管理員常需在伺服器間移動資料庫。本文整理六種主流方法,依情境優劣比較,助您選擇最適策略。
| 方法 | 適用情境 | 優點 | 缺點/注意 |
|---|---|---|---|
| 1. DTS 設計師/精靈 | 部分/全部資料表移轉、異構資料源、需排程/重複執行 | 視覺化、支援多工作、可存成套件重複使用、靈活對應欄位 | 大量資料速度較慢;外鍵需注意移轉順序或事後重建 |
| 2. BCP 公用程式 | 大量資料匯出/匯入、文字檔交換、自動化腳本 | 效能最佳、資源占用低、支援原生格式加速 | 非視覺化、僅支援資料表/檢視表↔文字檔、參數複雜 |
| 3. 備份/還原 | 整個資料庫移轉、災難復原、保留所有物件/權限/索引 | 最完整、速度快 (尤其還原)、單一檔案操作 | 需相同資料庫名稱、覆寫風險、跨版本還原有限制 |
| 4. 脫離/附加資料庫檔案 (sp_attach_db) | 同版本伺服器間快速移動、不想備份壓縮 | 極快、僅複製 .mdf/.ldf、保留所有中繼資料 | 需停止資料庫、檔案路徑須相容、跨版本風險 |
| 5. 應用程式/TSQL 自訂 (INSERT/SELECT INTO) | 增量同步、複雜轉換邏輯、跨連結伺服器 | 彈性最高、可嵌入商業邏輯、影響範圍可控 | 需開發維護、大量資料網路傳輸慢、交易一致性自行處理 |
| 6. SQL Server 複寫 | 持續同步、多目標、異地備援 | 近即時、支援篩選/轉換、成熟架構 | 設定複雜、需 Agent/MSDTC/主鍵/信任關係、除錯困難 |
-- 附加完整資料庫
EXEC sp_attach_db @dbname = 'test',
@filename1 = 'D:\MSSQL7\Data\test_data.mdf',
@filename2 = 'D:\MSSQL7\Data\test_log.ldf';
-- 僅附加資料檔 (自動建立新記錄檔,舊記錄遺失)
EXEC sp_detach_db @dbname = 'test';
EXEC sp_attach_single_file_db @dbname = 'test',
@physname = 'D:\MSSQL7\Data\test_data.mdf';
-- 建新表並複製
SELECT * INTO NewTable FROM LinkedSrv.DB.dbo.SourceTable WHERE ...;
-- 附加至既有表
INSERT INTO TargetTable SELECT * FROM LinkedSrv.DB.dbo.SourceTable WHERE ...;
WITH LOG 選項max text repl size 設定足夠大沒有萬用的移轉方法,關鍵在於評估「資料量、停機容忍度、版本差異、異構需求、持續同步與人力成本」。建議建立標準化移轉作業手冊 (Runbook),記錄各環境適用方法、參數與驗證步驟,確保生產環境操作零失誤。