使用 Amazon RDS for SQL Server 的變更資料擷取 - Amazon Relational Database Service

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

使用 Amazon RDS for SQL Server 的變更資料擷取

Amazon RDS 支援執行 Microsoft SQL Server 之資料庫執行個體的變更資料擷取支援 (CDC)。CDC 會擷取對資料表中之資料所做的變更。它會儲存與每個變更相關的中繼資料,而您稍候可存取這些中繼資料。如需 CDC 運作方式的詳細資訊,請參閱 Microsoft 文件中的變更資料擷取。使用 CDC 搭配您的 Amazon RDS 資料庫執行個體之前,請透過執行 msdb.dbo.rds_cdc_enable_db 以在資料庫中啟用它。啟用 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 許可授予使用者,請使用下列程序:

go GRANT EXECUTE ON msdb.dbo.rds_cdc_enable_db TO User1 GRANT EXECUTE ON msdb.dbo.rds_cdc_disable_db TO User1

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

在資料庫上啟用 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