異動資料擷取和其他功能

適用於:SQL ServerAzure SQL 受控執行個體

本文說明下列功能如何與 SQL Server 和 Azure SQL 受控執行個體的異動資料擷取互動。 如需 Azure SQL 資料庫,請參閱使用 Azure SQL 資料庫 CDC

變更追蹤

您可以在同一個資料庫上啟用變更資料擷取和 變更追蹤 。 不需要進行任何特殊考量。 如需詳細資訊,請參閱使用變更追蹤

資料庫鏡像

啟用變更資料擷取的資料庫可以進行鏡像。 若要確保擷取和清除會在容錯移轉之後自動進行,請遵循下列步驟:

  1. 請確定 SQL Server Agent 是在新的主體伺服器執行個體上執行。

  2. 在新的主體資料庫上建立擷取作業和清除作業 (之前的鏡像資料庫)。 若要建立這些作業,請使用 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。 這個代理程式會同時擴展變更資料表和散發資料庫資料表。 如需詳細資訊,請參閱 Replication Log Reader Agent

假設您在 AdventureWorks2022 資料庫上啟用了變更資料擷取,而且有兩份資料表啟用了擷取。 為了擴展變更資料表,擷取作業會呼叫 sp_replcmds。 資料庫啟用了異動複寫,而且建立了發行集。 此時,會針對資料庫建立記錄讀取器代理程式,並且刪除擷取作業。 記錄讀取器代理程式會繼續掃描記錄,從變更資料表所認可的最後一個記錄序號開始。 如此可確保變更資料表中的資料保持一致。 如果這個資料庫停用了異動複寫,系統就會移除記錄讀取器代理程式並且重新建立擷取作業。

注意

當記錄讀取器代理程式同時用於變更資料擷取和異動複寫時,複寫的變更會先寫入散發資料庫。 然後,擷取的變更才會寫入變更資料表。 這兩項作業會一起認可。 如果寫入散發資料庫時發生延遲,系統會建立對應的延遲,然後變更才會出現在變更資料表中。

啟用異動資料擷取時,無法使用異動複寫的 proc exec 選項。

資料庫還原或附加

SQL Server 會使用下列邏輯判斷在還原或附加資料庫之後,異動資料擷取是否仍會維持啟用狀態:

  • 如果資料庫還原至具有相同資料庫名稱的相同伺服器,變更資料擷取就會維持啟用狀態。

  • 如果資料庫還原至其他伺服器,預設會停用變更資料擷取並且刪除所有相關的中繼資料。

    若要保留變更資料擷取,請在還原資料庫時使用 KEEP_CDC 選項。 如需有關這個選項的詳細資訊,請參閱< RESTORE>。

  • 如果資料庫卸離並附加至相同伺服器或其他伺服器,變更資料擷取就會維持啟用狀態。

  • 如果您利用 KEEP_CDC 選項將資料庫附加或還原至 SQL Server Standard、Enterprise 或 SQL 受控執行個體以外的任何版本,此作業就會遭封鎖,因為異動資料擷取必須使用 SQL Server Standard、Enterprise 或 SQL 受控執行個體版本。 此時會顯示錯誤訊息 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 restore database without KEEP_CDC option, or upgrade the instance to one that supports change data capture.

您可以使用 sys.sp_cdc_disable_db ,從還原或附加的資料庫中移除變更資料擷取。

在 Azure SQL 受控執行個體上還原資料庫之後,CDC 會保持啟用狀態,但您必須確定掃描和清除作業已新增且正在執行中。 您可以執行 sys.sp_cdc_add_job,以手動新增作業。

自主資料庫

自主資料庫中不支援異動資料擷取。

可用性群組

當您使用 Always ON 可用性群組時,應該在次要複本上完成變更列舉以減少主要複本的磁碟負載。

資料行存放區索引

無法在具有叢集資料行存放區索引的資料表上啟用變更資料擷取。 從 SQL Server 2016 開始,可以在具有非叢集資料行存放區索引的資料表上啟用此功能。

計算資料行

CDC 不支援計算資料行的值,即使計算資料行定義為保存也一樣。 包含在擷取執行個體中的計算資料行,一律使用 NULL 值。 這是預定行為,不是錯誤。

Linux

Linux 上的 SQL Server 2017 (從 CU18 開始),以及 Linux 上的 SQL Server 2019 支援 CDC。

另請參閱