資料庫管理員頻繁面臨跨伺服器移動資料庫需求。本文比較 SQL Server 7.0 六種主流移動方法,依據資料量、停機窗口、網路頻寬、異質平台等因素提供選型指南。
| 方法 | 適用場景 | 優點 | 缺點 | 停機時間 |
|---|---|---|---|---|
| 1. DTS 導入/導出 | 部分表、異質來源、需轉換 | 視覺化、支援轉換、可存套件重用 | 大量資料慢、外鍵須手動處理順序 | 短 (可線上) |
| 2. BCP | 大量純文字/原生格式、自動化腳本 | 效能最好、記憶體佔用低、無 UI 依賴 | 命令列、不支援轉換、外鍵/索引需重建 | 短 (可線上) |
| 3. 備份/還原 | 整庫遷移、災難復原、版本相容 | 最完整 (含統計、權限、全文)、單一檔案 | 需備份檔傳輸時間、目標版本需 ≥ 來源 | 中 (離線還原) |
| 4. 分離/附加 (sp_detach_db / sp_attach_db) | 同版本實例間移動、檔案層級複製 | 極快 (僅複製 .mdf/.ldf)、保留所有屬性 | **需離線**、版本不可降級、單一檔案附加丟失記錄 | 短 (離線複製) |
| 5. 應用程式 (SELECT INTO / INSERT SELECT) | 異構平台、需業務邏輯過濾、跨網段 | 彈性最高、可邊搬邊轉、支援異質 DB | 開發成本高、效能依賴網路/邏輯 | 可線上 (增量) |
| 6. 複寫 | 持續同步、報表分流、多站點 | 近即時、支援篩選/轉換、雙向 | 設定複雜、需主鍵、Agent/MSDTC、頻寬敏感 | 無 (線上) |
RESTORE DATABASE TargetDB
FROM DISK = 'C:\Backup\SourceDB.bak'
WITH REPLACE, -- 強制覆蓋現有資料庫
MOVE 'Source_Data' TO 'D:\MSSQL\Data\Target_Data.mdf',
MOVE 'Source_Log' TO 'D:\MSSQL\Log\Target_Log.ldf',
STATS = 10;
EXEC sp_detach_db 'SourceDB';
EXEC sp_attach_single_file_db @dbname = 'TargetDB',
@physname = 'D:\MSSQL\Data\Source_Data.mdf';
-- 記錄檔自動重建,原記錄內容遺失
-- 1. 建新表並複製 (結構+資料)
SELECT * INTO NewTable FROM LinkedServer.SourceDB.dbo.SourceTable WHERE ...;
-- 2. 寫入既有表 (僅資料)
INSERT INTO TargetTable SELECT * FROM LinkedServer.SourceDB.dbo.SourceTable WHERE ...;
模式 2 結構固定、適用增量同步;模式 1 適合初始遷移。
@schema_option 包含 0x0000000008000000 (記錄複寫)max text repl size 設定足夠大 (預設 65536 Bytes)需求分析 ├─ 整庫、同版本、可停機 → 分離/附加 (最快) 或 備份/還原 (最完整) ├─ 整庫、異版本/異平台 → 備份/還原 (升級) 或 DTS/BCP + 手建結構 ├─ 部分表、需轉換/清洗 → DTS (視覺化) 或 應用程式 (邏輯複雜) ├─ 持續同步/報表分流 → 複寫 (交易式/合併式) ├─ 極大量 (TB)、網路受限 → BCP 產生檔案 → 實體傳輸硬碟 → BCP 匯入 └─ 雲端遷移 → Azure Database Migration Service / DMA / BACPAC