CDC 讀取啟用資料表的交易記錄,將變更寫入同資料庫的系統表,可透過直接查詢或系統函數存取。
CREATE DATABASE TestCdc
USE TestCdc
EXEC sys.sp_cdc_enable_db
系統表新增(均屬 cdc 結構描述):
cdc.captured_columnscdc.change_tablescdc.ddl_historycdc.index_columnscdc.lsn_time_mappingdbo.systranschemas資料表值函數(含內嵌空白,需特殊查詢):
fn_cdc_get_all_changes_...fn_cdc_get_net_changes_...系統預存程序新增 4 支(批次插入 LSN 對應等)。
CREATE SCHEMA MySchema
CREATE TABLE MySchema.Person (
PersonID INT IDENTITY PRIMARY KEY,
FirstName VARCHAR(32) NOT NULL,
LastName VARCHAR(32) NOT NULL,
UpdateCt INT NOT NULL DEFAULT 0
)
此步驟不影響上述系統物件。
EXEC sys.sp_cdc_enable_table
@source_schema = N'MySchema',
@source_name = N'Person',
@role_name = N'ChangeDataAccessRole',
@supports_net_changes = 1
新增物件:
cdc.MySchema_Person_CT(含 __$start_lsn, __$operation, PersonID, FirstName...)cdc.TestCdc_capture(擷取)、cdc.TestCdc_cleanup(清除)ChangeDataAccessRole(隸屬 cdc,僅有兩個函數的 SELECT 權限)fn_cdc_get_all_changes_MySchema_Person, fn_cdc_get_net_changes_MySchema_Personsp_batchinsert_..., sp_insdel_..., sp_upd_...sa,分類 REPL-LogReader,描述 "CDC Log Scan Job"sys.sp_MScdc_capture_job(安全檢查後呼叫 sys.sp_cdc_scan)sys.sp_cdc_scan 每 5 秒一循環,呼叫 sp_replcmds 讀取待發送交易sys.dm_cdc_log_scan_sessionsChangeDataAccessRole 僅授予查詢變更函數權限,遵循最小權限原則。
CDC 將交易記錄非同步轉換為結構化變更資料,配合專用擷取作業與細粒度權限控管,提供可靠、低延遲的變更資料饋送機制。