Verwendung der Erfassung von Datenänderungen (Change Data Capture) - Amazon Relational Database Service

Verwendung der Erfassung von Datenänderungen (Change Data Capture)

Amazon RDS unterstützt auch die Erfassung von Datenänderungen (Change Data Capture, CDC) für Ihre DB-Instances, die auf Microsoft SQL Server laufen. CDC erfasst Änderungen an Daten in Ihren Tabellen. Es speichert Metadaten über jede Änderung, auf die Sie später zugreifen können. Weitere Informationen über die Arbeitsweise von CDC finden Sie unter Change Data Capture in der Microsoft-Dokumentation.

Bevor Sie CDC für Ihre Amazon RDS-DB-Instances verwenden, aktivieren Sie es in der Datenbank, indem Sie msdb.dbo.rds_cdc_enable_db ausführen. Sie müssen über Master-Benutzerrechte verfügen, um CDC in der Amazon RDS DB-Instance zu aktivieren. Nachdem CDC aktiviert wurde, kann jeder Benutzer, der db_owner dieser Datenbank ist, CDC für Tabellen in dieser Datenbank aktivieren oder deaktivieren.

Wichtig

Während einer Wiederherstellung wird CDC deaktiviert. Alle zugehörigen Metadaten werden automatisch aus der Datenbank entfernt. Dies gilt für Snapshot-Wiederherstellungen, zeitbezogene Wiederherstellungen und SQL Server Native-Wiederherstellungen aus S3. Nachdem Sie eine dieser Wiederherstellungsarten durchgeführt haben, können Sie CDC wieder aktivieren und nachzuverfolgende Tabellen neu festlegen.

Um CDC für eine DB-Instance zu aktivieren, führen Sie die gespeicherte msdb.dbo.rds_cdc_enable_db-Prozedur aus.

exec msdb.dbo.rds_cdc_enable_db 'database_name'

Um CDC für eine DB-Instance zu deaktivieren, führen Sie die gespeicherte msdb.dbo.rds_cdc_disable_db-Prozedur aus.

exec msdb.dbo.rds_cdc_disable_db 'database_name'

Nachverfolgen von Tabellen mit Change Data Capture

Nachdem CDC für die Datenbank aktiviert wurde, können Sie mit der Nachverfolgung spezifischer Tabellen beginnen. Sie wählen die nachzuverfolgenden Tabellen durch Ausführen von 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' ;

Um die CDC-Konfiguration für Ihre Tabellen anzuzeigen, führen Sie sys.sp_cdc_help_change_data_capture aus.

--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' ;

Weitere Informationen zu CDC-Tabellen, Funktionen und gespeicherten Prozeduren in der SQL Server-Dokumentation finden Sie im Folgenden:

Change Data Capture-Aufträge

Wenn Sie CDC aktivieren, erstellt SQL Server die CDC-Aufträge. Datenbankbesitzer (db_owner) können die CDC-Aufträge anzeigen, erstellen, ändern und löschen. Sie gehören jedoch dem RDS-Systemkonto. Aus diesem Grund sind die Aufträge in nativen Ansichten, Prozeduren oder in SQL Server Management Studio nicht sichtbar.

Für die Kontrolle des Verhaltens von CDC in einer Datenbank verwenden Sie native SQL Server-Prozeduren wie sp_cdc_enable_table und sp_cdc_start_job. Für die Änderung der Parameter von CDC-Aufträgen wie maxtrans und maxscans verwenden Sie sp_cdc_change_job.

Um weitere Informationen zu den CDC-Aufträgen zu erhalten, können Sie die folgenden dynamischen Verwaltungsansichten abfragen:

  • sys.dm_cdc_errors

  • sys.dm_cdc_log_scan_sessions

  • sysjobs

  • sysjobhistory

Change Data Capture für Multi-AZ-Instances

Wenn Sie CDC für eine Multi-AZ-Instance verwenden, vergewissern Sie sich, dass die CDC-Auftragskonfiguration der Spiegelung mit derjenigen auf dem Prinzipal übereinstimmt. CDC-Aufträge werden auf die database_id abgebildet. Wenn sich die Datenbank-IDs des Sekundärs und des Prinzipals unterscheiden, werden die Aufträge nicht mit der richtigen Datenbank verknüpft. Um Fehler nach dem Failover zu vermeiden, verwirft RDS die Aufträge auf dem neuen Prinzipal und erstellt sie neu. Die neu erstellten Aufträge verwenden die Parameter, die der Prinzipal vor dem Failover aufgezeichnet hat.

Obwohl dieser Prozess schnell abläuft, ist es immer noch möglich, dass die CDC-Aufträge ausgeführt werden, bevor RDS sie korrigieren kann. Hier gibt es drei Möglichkeiten zum Erzwingen der Konsistenz der Parameter von primären und sekundären Replicas:

  • Verwenden Sie die gleichen Auftragsparameter für alle Datenbanken, die CDC aktiviert haben.

  • Bevor Sie die CDC-Auftragskonfiguration ändern, konvertieren Sie die Multi-AZ-Instance zu Single-AZ.

  • Übertragen Sie die Parameter manuell, wenn Sie sie auf dem Prinzipal ändern.

Um die CDC-Parameter anzuzeigen und zu definieren, mit denen die CDC-Aufträge nach einem Failover neu erstellt werden, verwenden Sie rds_show_configuration und rds_set_configuration.

Das folgende Beispiel gibt den für cdc_capture_maxtrans festgelegten Wert zurück. Für alle Parameter, die auf RDS_DEFAULT gesetzt sind, konfiguriert RDS den Wert automatisch.

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

Um die Konfiguration auf dem sekundären Server einzurichten, führen Sie rdsadmin.dbo.rds_set_configuration aus. Dieses Verfahren legt die Parameterwerte für alle Datenbanken auf dem sekundären Server fest. Diese Einstellungen werden nur nach einem Failover verwendet. Das folgende Beispiel setzt den maxtrans für alle CDC-Erfassungsaufträge auf 1 000:

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

Um die CDC-Auftragsparameter auf dem Prinzipal festzulegen, verwenden Sie stattdessen sys.sp_cdc_change_job.