使用變更資料擷取 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用變更資料擷取

Amazon RDS 支援執行 Microsoft SQL Server 之資料庫執行個體的變更資料擷取支援 (CDC)。CDC 會擷取對資料表中之資料所做的變更。它會儲存與每個變更相關的中繼資料,而您稍候可存取這些中繼資料。如需 CDC 運作方式的詳細資訊,請參閱 Microsoft 文件中的變更資料擷取

使用 CDC 搭配您的 Amazon RDS 資料庫執行個體之前,請透過執行 msdb.dbo.rds_cdc_enable_db 以在資料庫中啟用它。您必須有主要使用者權限才能啟用 Amazon RDS 資料庫執行個體中的 CDC。啟用 CDC 之後,該資料庫 db_owner 的任何使用者都可以在該資料庫的資料表上啟用或停用 CDC。

重要

還原期間,將停用 CDC。所有相關中繼資料會自動從資料庫移除。這適用於從 S3 的快照還原、point-in-time 還原和 SQL Server 原生還原。執行其中一個還原類型後,您就可以重新啟用 CDC 和重新指定要追蹤的資料表。

若要啟用資料庫執行個體的 CDC,請執行 msdb.dbo.rds_cdc_enable_db 預存程序。

exec msdb.dbo.rds_cdc_enable_db 'database_name'

若要停用資料庫執行個體的 CDC,請執行 msdb.dbo.rds_cdc_disable_db 預存程序。

exec msdb.dbo.rds_cdc_disable_db 'database_name'

使用變更資料擷取來追蹤資料表

在資料庫上啟用 CDC 之後,您就可以開始追蹤特定資料表。您可以執行 sys.sp_cdc_enable_table 來選擇要追蹤的資料表。

--Begin tracking a table exec sys.sp_cdc_enable_table @source_schema = N'source_schema' , @source_name = N'source_name' , @role_name = N'role_name' --The following parameters are optional: --, @capture_instance = 'capture_instance' --, @supports_net_changes = supports_net_changes --, @index_name = 'index_name' --, @captured_column_list = 'captured_column_list' --, @filegroup_name = 'filegroup_name' --, @allow_partition_switch = 'allow_partition_switch' ;

若要檢視資料表的 CDC 組態,請執行 sys.sp_cdc_help_change_data_capture

--View CDC configuration exec sys.sp_cdc_help_change_data_capture --The following parameters are optional and must be used together. -- 'schema_name', 'table_name' ;

如需 SQL Server 文件中 CDC 資料表、函數和預存程序的詳細資訊,請參閱下列:

變更資料擷取任務

啟用 CDC 時,SQL Server 會建立 CDC 任務。資料庫擁有者 (db_owner) 可以檢視、建立、修改和刪除 CDC 任務。不過,RDS 系統帳戶擁有這些任務。因此,任務不會在原生檢視、程序或是在 SQL Server Management Studio 中顯示。

若要控制資料庫中 CDC 的行為,請使用原生 SQL Server 程序,例如 sp_cdc_enable_tablesp_cdc_start_job。若要變更 CDC 任務參數,例如 maxtransmaxscans,您可以使用 sp_cdc_change_job.

若要取得有關 CDC 任務的更多資訊,您可以查詢下列動態管理檢視:

  • sys.dm_cdc_errors

  • sys.dm_cdc_log_scan_sessions

  • sysjobs

  • sysjobhistory

變更多個可用區執行個體的資料擷取

如果您在多重可用區執行個體上使用 CDC,請確定鏡像的 CDC 任務組態符合委託人上的組態。CDC 任務會映射至 database_id。如果次要伺服器上的資料庫 ID 與委託人不同,那麼,任務將不會與正確的資料庫關聯。為了嘗試在容錯移轉之後避免錯誤,RDS 會在新委託人上放置並重新建立任務。重新建立的任務會使用委託人在容錯移轉之前記錄的參數。

儘管此程序的執行速度很快,但在 RDS 可更正 CDC 任務前這些任務可能仍會執行。以下是強制讓主要和次要複本之間的參數一致的三個方式:

  • 對已啟用 CDC 的所有資料庫使用相同任務參數。

  • 變更 CDC 任務組態之前,將多重可用區執行個體轉換為單一可用區。

  • 每當您在委託人上變更參數時,請手動傳輸參數。

容錯移轉之後,若要檢視和定義用來重新建立 CDC 任務的 CDC 參數,請使用 rds_show_configurationrds_set_configuration

下列範例會傳回 cdc_capture_maxtrans 的數值:針對設為 RDS_DEFAULT 的任何參數,RDS 會自動設定該數值。

-- Show configuration for each parameter on either primary and secondary replicas. exec rdsadmin.dbo.rds_show_configuration 'cdc_capture_maxtrans';

若要設定次要伺服器上的組態,請執行 rdsadmin.dbo.rds_set_configuration。此程序會設定次要伺服器上所有資料庫的參數值。只有在容錯移轉之後才會使用這些設定。下列範例會將所有 CDC 擷取任務的 maxtrans 設定為 1000

--To set values on secondary. These are used after failover. exec rdsadmin.dbo.rds_set_configuration 'cdc_capture_maxtrans', 1000;

若要設定委託人上的 CDC 任務參數,請改為使用 sys.sp_cdc_change_job