資料移動是 DBA 核心技能之一。本文系統整理六種主流方法,從工具、指令到架構層面,助您依情境做最佳選擇。
| # | 方法 | 核心工具/指令 | 適用場景 | 優點 | 缺點/注意 |
|---|---|---|---|---|---|
| 1 | DTS 設計師 | Enterprise Manager → 匯入/匯出 / DTS 套件 | 部分表、異構來源、需排程重複 | GUI 直覺、可存套件重用、支援轉換 | 外鍵須手動處理順序、大量資料較慢 |
| 2 | BCP 大量複製 | bcp.exe 命令列 | 純文字檔⇄資料表、極大量資料 | 效能最佳、資源極低、可腳本化 | 無 GUI、不支援物件結構、格式檔複雜 |
| 3 | 備份與還原 | BACKUP / RESTORE DATABASE | 整庫遷移、災難復原、版本升級 | 完整保留結構/索引/權限、可跨版本 | 需停機或獨佔、檔案較大 |
| 4 | 附加/卸離檔案 | sp_detach_db / sp_attach_db / sp_attach_single_file_db | 同版本伺服器快速移動、唯讀資料庫 | 極快、無備份檔中繼、可僅掛載 MDF | 版本相容性嚴格、需停止服務 |
| 5 | 應用程式客製 | INSERT...SELECT / SELECT...INTO / 連結伺服器 | 增量同步、複雜轉換邏輯、異構同步 | 彈性最高、可整合業務邏輯 | 開發成本高、需注意交易一致性、網路延遲 |
| 6 | 複寫 | 發行/訂閱/散發者架構 | 持續同步、多站點分散、報表卸載 | 自動化、近即時、支援衝突解決 | 架構複雜、除錯難、授權成本高 |
bcp db.dbo.table out data.txt -c -t, -T -S server
bcp db.dbo.table in data.txt -c -t, -T -S server -f fmt.fmt
格式檔 (.fmt) 定義欄位對應、終止符、資料型別,避免匯入失敗。
-- 建新表並寫入 (結構+資料一次完成)
SELECT col1, col2 INTO new_table FROM src_table WHERE ...;
-- 寫入既有表 (需先建表結構)
INSERT INTO target_table (col1, col2) SELECT col1, col2 FROM src_table WHERE ...;
推薦 INSERT...SELECT:結構可控、可重複執行、易於交易控制。