異動資料擷取和其他 SQL Server 功能
此主題描述下列功能如何與異動資料擷取互動:
變更追蹤
資料庫鏡像
交易式複寫
資料庫還原或附加
資料庫鏡像
啟用異動資料擷取的資料庫可以進行鏡像。若要確保擷取和清除會自動在鏡像上進行,請遵循下列步驟:
確定 SQL Server Agent 正在鏡像上執行。
當主體已經容錯移轉至鏡像之後,在鏡像上建立擷取作業和清除作業。若要建立這些作業,請使用預存程序 sys.sp_cdc_add_job (Transact-SQL)。
如需有關資料庫鏡像的詳細資訊,請參閱<資料庫鏡像>。
交易式複寫
雖然異動資料擷取和交易式複寫可以同時存在同一個資料庫中,但是同時啟用這兩項功能時,系統會以不同的方式處理變更資料表的擴展。異動資料擷取和交易式複寫一定會使用相同的程序 sp_replcmds,從交易記錄中讀取變更。單獨啟用異動資料擷取時,SQL Server Agent 作業就會呼叫 sp_replcmds。如需詳細資訊,請參閱<擷取作業>。在同一個資料庫上同時啟用這兩項功能時,記錄讀取器代理程式就會呼叫 sp_replcmds。這個代理程式會同時擴展變更資料表和散發資料庫資料表。如需詳細資訊,請參閱<複寫記錄讀取器代理程式>。
假設您在 AdventureWorks 資料庫上啟用了異動資料擷取,而且有兩份資料表啟用了擷取。為了擴展變更資料表,擷取作業會呼叫 sp_replcmds。資料庫啟用了交易式複寫,而且建立了發行集。此時,系統會針對資料庫建立記錄讀取器代理程式並且刪除擷取作業。記錄讀取器代理程式會繼續掃描記錄,從變更資料表所認可的最後一個記錄序號開始。如此可確保變更資料表中的資料保持一致。如果這個資料庫停用了交易式複寫,系統就會移除記錄讀取器代理程式並且重新建立擷取作業。
[!附註]
當記錄讀取器代理程式同時用於異動資料擷取和交易式複寫時,複寫的變更會先寫入散發資料庫。然後,擷取的變更才會寫入變更資料表。這兩項作業會一起認可。如果寫入散發資料庫時發生延遲,系統會建立對應的延遲,然後變更才會出現在變更資料表中。
還原或附加啟用異動資料擷取的資料庫
SQL Server 會使用下列邏輯來判斷在還原或附加資料庫之後,異動資料擷取是否會維持啟用狀態:
如果資料庫還原至具有相同資料庫名稱的相同伺服器,異動資料擷取就會維持啟用狀態。
如果資料庫還原至其他伺服器,預設會停用異動資料擷取並且刪除所有相關的中繼資料。
若要保留異動資料擷取,請在還原資料庫時使用 KEEP_CDC 選項。如需有關這個選項的詳細資訊,請參閱<RESTORE>。
如果資料庫卸離並附加至相同伺服器或其他伺服器,異動資料擷取就會維持啟用狀態。
如果您使用 KEEP_CDC 選項,將資料庫附加或還原至 Enterprise 以外的任何版本,此作業就會遭封鎖,因為異動資料擷取需要 SQL Server Enterprise。此時會顯示錯誤訊息 932:
SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either disable change data capture in the database by using a supported edition of SQL Server, or upgrade the instance to one that supports change data capture.
您可以使用 sys.sp_cdc_disable_db,從還原或附加的資料庫中移除異動資料擷取。