首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 7.0/2000 六大資料移動技術全解析

     編輯:關於SqlServer

概覽:六大技術定位

#技術核心優勢主要限制建議場景
1DTS 設計師 / 匯入匯出精靈圖形化、多任務、支援異構來源、可存套件排程大量資料效能不如 BCP、套件版本管理弱部分表遷移、異構 ETL、業務邏輯轉換
2BCP (Bulk Copy Program)極高速、低資源、命令列自動化、格式檔彈性純文字/原生格式、無轉換邏輯、錯誤處理簡陋初始大量載入、離線備份、跨平台文字交換
3備份/還原 (BACKUP/RESTORE)完整保留結構、索引、權限、統計資料、交易一致性需相同版本/相容等級、無法部分還原、檔案大整庫遷移、災難復原、測試環境快速克隆
4分離/附加 (sp_detach_db / sp_attach_db)檔案層級移動、極快、無資料複製開銷需離線、檔案路徑固定、版本向上相容向下不相容同版本伺服器間移動資料庫、儲存體遷移
5應用層自訂 (INSERT...SELECT / SELECT...INTO)邏輯彈性、可攜帶業務規則、跨伺服器分散式查詢效能受網路/交易記錄影響、需自行處理錯誤/重試增量同步、異構同步、跨雲端/內部部署
6複寫近即時同步、支援篩選/轉換、雙向/合併拓撲架構複雜、需主鍵、Agent/MSDTC 依賴、疑難排解難異地備援、報表卸載、行動離線同步

關鍵操作細節與避坑指南

1. DTS/匯入匯出精靈

  • 外鍵順序:先匯入父表再子表,或暫停約束 ALTER TABLE ... NOCHECK CONSTRAINT ALL,匯完再 CHECK CONSTRAINT ALL。
  • 另存套件:*.dts (SQL 2000) / *.dtsx (SSIS) 存入 MSDB 或檔案系統,便於版控與排程。
  • 優化:資料流使用 Fast Load、批次大小 10,000~100,000、鎖定 TABLOCK、最小化記錄 (簡單復原模式)。

2. BCP

REM 匯出 (查詢輸出、含表頭需手工加入)
bcp "SELECT * FROM Db.dbo.Table ORDER BY ID" queryout "C:\Exp\data.txt" -c -t, -T -S.

REM 匯入 (需格式檔或目標表結構完全相符)
bcp Db.dbo.Table in "C:\Imp\data.txt" -c -t, -T -S. -h "TABLOCK" -b 50000
  • -h "TABLOCK" 大量匯入鎖定表,減少記錄、提升速度。
  • -b 批次大小 控制交易範圍,避免記錄暴增。
  • 格式檔 (-f) 解決欄位順序/型別不符、跳過欄位。

3. 備份/還原

BACKUP DATABASE Db TO DISK='D:\Backup\Db.bak' WITH INIT, COMPRESSION, STATS=10;
RESTORE DATABASE Db FROM DISK='D:\Backup\Db.bak'
WITH MOVE 'Db_Data' TO 'D:\MSSQL\Data\Db.mdf',
     MOVE 'Db_Log'  TO 'D:\MSSQL\Log\Db.ldf',
     REPLACE, STATS=10;
  • REPLACE 覆蓋既有資料庫。
  • MOVE 重新定位檔案路徑 (不同磁碟配置時必須)。
  • 還原後執行 DBCC UPDATEUSAGE(0) 修正頁面計數。

4. 分離/附加


EXEC sp_detach_db @dbname = 'Db';
-- 複製 .mdf .ldf 至新伺服器
EXEC sp_attach_db @dbname = 'Db',
    @filename1 = 'D:\MSSQL\Data\Db.mdf',
    @filename2 = 'D:\MSSQL\Log\Db.ldf';

-- 僅附加資料檔 (自動重建記錄檔,舊記錄遺失)
EXEC sp_attach_single_file_db @dbname = 'Db', @physname = 'D:\MSSQL\Data\Db.mdf';
限制:SQL 2000 不支援 sp_attach_single_file_db (SQL 2005+ 才有),且附加後資料庫相容等級維持原版本,可能需 sp_dbcmptlevel 調整。

5. 應用層自訂


-- 跨伺服器分散式查詢 (需連結伺服器)
INSERT INTO LocalDb.dbo.Table (Col1, Col2)
SELECT Col1, Col2 FROM LinkedSrv.RemoteDb.dbo.Table WHERE LoadDate > @LastSync;

-- 或 SELECT INTO 建新表 (結構+資料一次完成)
SELECT * INTO NewTable FROM LinkedSrv.RemoteDb.dbo.SourceTable;
  • 大量資料分批次 (如 5 萬列/批)、使用 TABLOCK、簡單復原模式減少記錄。
  • 網路頻寬、延遲是主要瓶頸,考慮壓縮、異步佇列 (Service Broker / Azure Queue)。

6. 複寫必要條件清單

  1. SQL Server Agent 啟動、MSDTC (Distributed Transaction Coordinator) 啟動。
  2. 所有發行資料表 必須有主鍵。
  3. text/image/ntext 欄位需 WITH LOG (不可 NO_LOG)。
  4. max text repl size 設定足夠大 (預設 65536 Bytes)。
  5. 發行/訂閱端啟用 隱含共用 (Admin$ / C$ 等)。
  6. 代理程式帳號 不可為 Local System (需網路存取權)。
  7. 跨網域需建立 信任關係。

現代化建議 (SQL Server 2016+ / Azure)

  • SSIS 取代 DTS:資料流引擎、平行執行、專案部署模型、Azure Feature Pack。
  • PolyBase / OPENROWSET (BULK...):直接查詢 Azure Blob/ADLS/Parquet/ORC,免 ETL 落地。
  • 資料庫遷移服務 (DMS) / Azure Migrate:線上無停機遷移、Schema/資料驗證。
  • Always On 可用性群組 / 交易複寫:高可用與讀寫分離取代傳統複寫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved