異動資料擷取和其他 SQL Server 功能
此主題描述下列功能如何與異動資料擷取互動:
變更追蹤
資料庫鏡像
異動複寫
還原或附加啟用異動資料擷取的資料庫
變更追蹤
您可以在同一個資料庫上啟用異動資料擷取和變更追蹤。 不需要進行任何特殊考量。 如需詳細資訊,請參閱<使用變更追蹤 (SQL Server)>。
資料庫鏡像
啟用異動資料擷取的資料庫可以進行鏡像。 若要確保擷取和清除會在容錯移轉之後自動進行,請遵循下列步驟:
請確定 SQL Server Agent 是在新的主體伺服器執行個體上執行。
在新的主體資料庫上建立擷取作業和清除作業 (之前的鏡像資料庫)。 若要建立這些作業,請使用 sp_cdc_add_job 預存程序。
若要檢視清除或擷取作業的目前組態,請在新的主體伺服器執行個體上使用 sys.sp_cdc_help_jobs 預存程序。 對於給定的資料庫而言,擷取作業會命名為 cdc.database_name_capture,而清除作業會命名為 cdc.database_name_cleanup,其中 database_name 是資料庫的名稱。
若要變更作業的組態,請使用 sys.sp_cdc_change_job 預存程序。
如需有關資料庫鏡像的資訊,請參閱<資料庫鏡像 (SQL Server)>。
異動複寫
雖然異動資料擷取和異動複寫可以同時存在同一個資料庫中,但是同時啟用這兩項功能時,系統會以不同的方式處理變更資料表的擴展。 異動資料擷取和異動複寫一定會使用相同的程序 sp_replcmds,從交易記錄中讀取變更。 單獨啟用異動資料擷取時,SQL Server Agent 作業就會呼叫 sp_replcmds。 在同一個資料庫上同時啟用這兩項功能時,記錄讀取器代理程式就會呼叫 sp_replcmds。 這個代理程式會同時擴展變更資料表和散發資料庫資料表。 如需詳細資訊,請參閱<複寫記錄讀取器代理程式>。
假設您在 AdventureWorks2012 資料庫上啟用了異動資料擷取,而且有兩份資料表啟用了擷取。 為了擴展變更資料表,擷取作業會呼叫 sp_replcmds。 資料庫啟用了異動複寫,而且建立了發行集。 此時,系統會針對資料庫建立記錄讀取器代理程式並且刪除擷取作業。 記錄讀取器代理程式會繼續掃描記錄,從變更資料表所認可的最後一個記錄序號開始。 如此可確保變更資料表中的資料保持一致。如果這個資料庫停用了異動複寫,系統就會移除記錄讀取器代理程式並且重新建立擷取作業。
[!附註]
當記錄讀取器代理程式同時用於異動資料擷取和異動複寫時,複寫的變更會先寫入散發資料庫。 然後,擷取的變更才會寫入變更資料表。 這兩項作業會一起認可。 如果寫入散發資料庫時發生延遲,系統會建立對應的延遲,然後變更才會出現在變更資料表中。
啟用異動資料擷取時,異動複寫的 proc exec 選項無法使用。
還原或附加啟用異動資料擷取的資料庫
SQL Server 會使用下列邏輯來判斷在還原或附加資料庫之後,異動資料擷取是否會維持啟用狀態:
如果資料庫還原至具有相同資料庫名稱的相同伺服器,異動資料擷取就會維持啟用狀態。
如果資料庫還原至其他伺服器,預設會停用異動資料擷取並且刪除所有相關的中繼資料。
若要保留異動資料擷取,請在還原資料庫時使用 KEEP_CDC 選項。 如需有關這個選項的詳細資訊,請參閱<RESTORE>。
如果資料庫卸離並附加至相同伺服器或其他伺服器,異動資料擷取就會維持啟用狀態。
如果您使用 KEEP_CDC 選項,將資料庫附加或還原至 Enterprise 以外的任何版本,此作業就會遭封鎖,因為異動資料擷取需要 SQL Server Enterprise。此時會顯示錯誤訊息 934:
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,從還原或附加的資料庫中移除異動資料擷取。