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

SQL Server 2008 CDC 與 Change Tracking 深度比較:異步擷取 vs 同步追蹤

     編輯:關於SqlServer

兩大變更追蹤機制:選對工具事半功倍

SQL Server 2008 同時推出 **Change Data Capture (CDC)** 與 **Change Tracking (CT)**,同樣記錄 DML 變更,但架構、資料豐富度、效能影響截然不同。

核心差異對照

維度Change Data Capture (CDC)Change Tracking (CT)
擷取方式**非同步** 讀取交易記錄檔 (Log Reader Agent)**同步** 在 DML 執行時即時寫入追蹤表
資料豐富度完整前後值、操作類型、時間、交易 ID僅主鍵、操作類型、變更欄位清單,**無前後值**
延遲秒~分鐘級 (視記錄讀取速度)**近乎即時** (DML Commit 即可見)
效能影響低 (非同步、獨立 Agent)極低 (輕量同步寫入)
儲存位置獨立 CDC 變更資料表 (`cdc.*_CT`)內建追蹤表 (隱藏系統表)
查詢介面`cdc.fn_cdc_get_all_changes_*` 等函數`CHANGETABLE(CHANGES ...)` 函數 + 版本號
適用場景**BI/ETL 增量抽取**、稽核、異地複寫來源**客戶端快取同步**、離線資料同步、輕量稽核
清理機制CDC 清理作業 (Agent 作業) 依保留期清除自動清理 (背景執行緒) 依保留期清除
版本需求Enterprise/Developer所有版本

CDC 架構流程

  1. 啟用資料庫 CDC → 建立 `cdc` Schema、擷取執行個體、變更資料表。
  2. 啟用資料表 CDC → 記錄檔掃描器 (Log Reader) 非同步讀取記錄 → 寫入 `cdc.dbo_Table_CT`。
  3. 消費端呼叫 `cdc.fn_cdc_get_net_changes_...` 取得指定 LSN 區間的淨變更 (已合併同一主鍵多次變更)。

CT 架構流程

  1. 啟用資料庫/資料表 CT → DML 執行時同步寫入內部追蹤表 (主鍵 + 版本 + 操作 + 變更欄位)。
  2. 消費端記住上次同步版本 `@last_sync_version`。
  3. 呼叫 `CHANGETABLE(CHANGES Table, @last_sync_version)` 取得變更主鍵清單。
  4. 再用主鍵 `JOIN` 基礎表讀取最新值 → 刷新快取/同步目標。

選型決策樹

  • 需要 **完整前後值** (稽核、ETL 轉換需知舊值) → **CDC**。
  • 只需 **知道哪些列變了**,再自己去讀最新值 (快取刷新、行動端同步) → **CT**。
  • **Standard/Web/Express 版本** → 唯有 **CT** 可用。
  • 極度在乎 **寫入延遲/效能影響** → **CT** (同步極輕量) 或 **CDC** (非同步零阻塞) 皆可,視讀取端容忍度。
  • 需 **Schema 變更追蹤** → 兩者皆不支援,需自行 DDL Trigger。

結語

**CDC = 重資料豐富度、BI/ETL 專用、Enterprise 專屬**;**CT = 輕量、即時、全版本、快取同步首選**。實務上常 **CT 供應用層即時同步,CDC 供數據倉庫夜間增量抽取**,兩者互補共存。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved