身為 DBA,跨伺服器移動資料庫是家常便飯。本文整理六種實務上常用的資料移動方法,各有優缺點,可依據情境選擇最適合的方案。
適用情境:部分資料表移動、異構資料來源間複製、需排程重複執行。
注意:有外鍵的資料表需注意移動順序,必要時分批移動或先複製資料再重建鍵值/索引。建議建表時將 FK、PK、索引腳本與建表腳本分離,並置於不同磁碟機以利最佳化。
特點:介面非圖形化、僅支援 SQL Server 資料表/檢視與文字檔互轉。
優勢:效能極佳、負擔小、記憶體佔用低、速度快。雖 SQL Server 7.0 起不再推薦,但許多資深 DBA 仍偏好使用。詳細參數請參閱線上叢書。
流程:完整備份 → 複製備份檔到目標伺服器 → 強制還原(覆蓋現有資料庫)。
優點:可完整還原資料庫結構,包含 FK、PK、索引,最適合整庫遷移。
將 .mdf 與 .ldf 複製到目標伺服器,使用系統預存程序掛載:
-- 掛載完整資料庫
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';
透過程式碼執行 SQL 陳述式,彈性最高,對資料庫影響最小。需注意網路傳輸效能。常用語法:
-- 建新表並寫入
SELECT ... INTO new_table FROM ... WHERE ...;
-- 寫入既有表
INSERT INTO old_table SELECT ... FROM ... WHERE ...;
推薦使用 INSERT INTO ... SELECT,結構更清晰、應用範圍更廣。
功能強大但學習曲線陡峭,適合持續同步需求。成功關鍵在於正確設定發行者/訂閱者、衝突解決策略與監控機制。詳細設定請參考官方文件。
| 方法 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
| DTS | 部分表、異構來源、排程 | 視覺化、可重複使用 | 外鍵需手動處理順序 |
| BCP | 大量純文字匯入匯出 | 極快、低資源 | 無 GUI、功能受限 |
| 備份/還原 | 整庫遷移、災難復原 | 完整保留所有物件 | 需停機或鎖定 |
| 附加檔案 | 同版本伺服器快速移動 | 速度快、無備份檔 | 版本相容性限制 |
| 應用程式 | 客製化邏輯、增量同步 | 彈性最高 | 開發成本高 |
| 複寫 | 持續同步、分散式 | 自動化程度高 | 複雜、難除錯 |
實務上常組合使用,例如:初始同步用備份/還原,增量同步用複寫或應用程式。