Freigeben über


CDC-Steuerungstask

Gilt für: SQL Server SSIS Integration Runtime in Azure Data Factory

Wichtig

CDC Flow-Komponenten, einschließlich CDC Control Task, CDC Source und CDC Splitter, sind veraltet. Weitere Informationen finden Sie in der Ankündigung.

Der CDC-Steuerungstask wird verwendet, um den Lebenszyklus von Change Data Capture-Paketen (CDC) zu steuern. Er behandelt die CDC-Paketsynchronisierung mit dem Paket des erstmaligen Ladens, also die Verwaltung der Bereiche von Protokollfolgenummern (LSNs), die bei einer Ausführung eines CDC-Pakets verarbeitet werden. Außerdem wird der CDC-Steuerungstask für Fehlerszenarien und für die Wiederherstellung verwendet.

Der CDC-Steuerungstask verwaltet den Status des CDC-Pakets in einer SSIS-Paketvariablen und kann diesen auch in einer Datenbanktabelle dauerhaft speichern, damit der Status über Paketaktivierungen hinweg und zwischen mehreren Paketen beibehalten werden kann, die zusammen einen allgemeinen CDC-Prozess durchführen (ein Task kann z. B. für das erstmalige Laden und ein anderer Task für Trickle-Feed-Updates zuständig sein).

Der CDC-Steuerungstask unterstützt zwei Gruppen von Vorgängen. Eine Gruppe behandelt die Synchronisierung von erstmaligem Laden und Änderungsverarbeitung, und die andere Gruppe verwaltet den LSN-Bereich für die Änderungsverarbeitung zur Ausführung eines CDC-Pakets und verfolgt, welche Daten erfolgreich verarbeitet wurden.

Die folgenden Vorgänge behandeln die Synchronisierung von erstmaligem Laden und Änderungsverarbeitung:

Vorgang BESCHREIBUNG
ResetCdcState Dieser Vorgang wird verwendet, um den persistenten CDC-Status zurückzusetzen, der dem aktuellen CDC-Kontext zugeordnet ist. Nachdem dieser Vorgang ausgeführt wurde, wird die aktuelle höchste LSN aus der LSN-Zeitstempeltabelle sys.fn_cdc_get_max_lsn zum Startpunkt für den nächsten Verarbeitungsbereich. Für diesen Vorgang ist eine Verbindung zur Quelldatenbank erforderlich.
MarkInitialLoadStart Dieser Vorgang wird zu Beginn eines Pakets für das erstmalige Laden verwendet, um die aktuelle LSN in der Quelldatenbank aufzuzeichnen, bevor das Paket für das erstmalige Laden mit dem Lesen der Quelltabellen beginnt. Dies erfordert eine Verbindung zur Quelldatenbank, damit sys.fn_cdc_get_max_lsnaufgerufen werden kann.

Wenn Sie MarkInitialLoadStart wählen, wenn Sie mit SQL Server CDC (also nicht Oracle) arbeiten, muss der im Verbindungsmanager angegebene Benutzer entweder db_owner oder sysadmin sein.
MarkInitialLoadEnd Dieser Vorgang wird am Ende eines Pakets zum erstmaligen Laden verwendet, um die aktuelle LSN in der Quelldatenbank aufzuzeichnen, nachdem das Paket für das erstmalige Laden das Lesen der Quelltabellen beendet hat. Diese LSN wird durch das Aufzeichnen des aktuellen Zeitpunkts, zu dem dieser Vorgang aufgetreten ist, und das anschließende Abfragen der Zuordnungstabelle cdc.lsn_time_in der CDC-Datenbank ermittelt. Dabei wird nach einer Änderung gesucht, die nach diesem Zeitpunkt aufgetreten ist.

Wenn Sie MarkInitialLoadEnd wählen, wenn Sie mit SQL Server CDC arbeiten (d.h. nicht Oracle), muss der im Verbindungsmanager angegebene Benutzer entweder db_owner oder sysadmin sein.
MarkCdcStart Dieser Vorgang wird verwendet, wenn das erstmalige Laden basierend auf einer Momentaufnahmen-Datenbank erfolgt. In diesem Fall sollte die Änderungsverarbeitung unmittelbar nach der Momentaufnahme-LSN starten. Sie können den Namen der zu verwendenden Momentaufnahmen-Datenbank angeben. Der CDC-Steuerungstask fragt SQL Server dann nach der Momentaufnahme-LSN ab. Sie können die Momentaufnahme-LSN auch direkt angeben.

Wenn Sie MarkCdcStart wählen, wenn Sie mit SQL Server CDC (also nicht Oracle) arbeiten, muss der im Verbindungsmanager angegebene Benutzer entweder db_owner oder sysadmin sein.

Die folgenden Vorgänge werden verwendet, um den Verarbeitungsbereich zu verwalten:

Vorgang BESCHREIBUNG
GetProcessingRange Dieser Vorgang wird vor dem Aufrufen des Datenflusses verwendet, der den CDC-Quelldatenfluss nutzt. Dabei wird ein Bereich von LSNs eingerichtet, der vom CDC-Quelldatenfluss nach dem Aufrufen gelesen wird. Der Bereich wird in einer SSIS-Paketvariablen gespeichert, die von der CDC-Quelle während der Datenflussverarbeitung verwendet wird.

Weitere Informationen zu den gespeicherten Status finden Sie unter Definieren einer Statusvariablen.
MarkProcessedRange Dieser Vorgang wird nach jeder CDC-Ausführung ausgeführt (nachdem der CDC-Datenfluss erfolgreich abgeschlossen wurde), um die letzte LSN aufzuzeichnen, die bei der CDC-Ausführung vollständig verarbeitet wurde. Bei der nächsten Ausführung von GetProcessingRange dient diese Position als Startpunkt für den Verarbeitungsbereich.

Behandeln von CDC-Statuspersistenz

Der CDC-Steuerungstask behält zwischen Aktivierungen einen persistenten Status bei. Die im CDC-Status gespeicherten Informationen werden verwendet, um den Verarbeitungsbereich für das CDC-Paket zu bestimmen und zu verwalten und Fehlerzustände zu erkennen. Der persistente Status wird als Zeichenfolge gespeichert. Weitere Informationen finden Sie unter Definieren einer Statusvariablen.

Der CDC-Steuerungstask unterstützt zwei Typen der Statuspersistenz:

  • Manuelle Statuspersistenz: In diesem Fall verwaltet der CDC-Steuerungstask den in einer Paketvariablen gespeicherten Status. Der Paketentwickler muss die Variable vor dem Aufrufen der CDC-Steuerung jedoch aus einem persistenten Speicher lesen und dann in diesen persistenten Speicher zurückschreiben, nachdem die CDC-Steuerung zuletzt aufgerufen und die CDC-Ausführung abgeschlossen wurde.

  • Automatische Statuspersistenz: Der CDC-Status wird in einer Tabelle in einer Datenbank gespeichert. Der Status wird unter einem in der StateName -Eigenschaft angegebenen Namen in einer Tabelle gespeichert, die in der Tabelle für Speicherstatus -Eigenschaft angegeben ist. Sie befindet sich in einem ausgewählten Verbindungs-Manager zum Speichern des Status. Die Standardeinstellung ist der Quellverbindungs-Manager, aber häufig wird der Zielverbindungs-Manager verwendet. Der CDC-Steuerungstask aktualisiert den Statuswert in der Statustabelle, und dafür wird als Teil der Ambient-Transaktion ein Commit ausgeführt.

Fehlerbehandlung

Der CDC-Steuerungstask meldet möglicherweise in folgenden Fällen einen Fehler:

  • Beim Lesen des persistenten CDC-Status oder beim Aktualisieren des persistenten Status tritt ein Fehler auf.

  • Beim Lesen der aktuellen LSN-Informationen aus der Quelldatenbank tritt ein Fehler auf.

  • Der gelesene CDC-Status ist nicht konsistent.

In all diesen Fällen meldet der CDC-Steuerungstask einen Fehler, der mithilfe der Standardmethode behandelt werden kann, die SSIS auch für Befehlsflussfehler verwendet.

Der CDC-Steuerungstask zeigt möglicherweise auch eine Warnung an, wenn der Get Processing Range-Vorgang direkt nach einem anderen Get Processing Range-Vorgang aufgerufen wird, ohne dass Mark Processed Range aufgerufen wird. Dies ist ein Anzeichen dafür, dass bei der vorherigen Ausführung ein Fehler aufgetreten ist oder dass möglicherweise ein anderes CDC-Paket ausgeführt wird und den gleichen CDC-Statusnamen verwendet.

Konfigurieren des CDC-Steuerungstasks

Sie können Eigenschaften programmgesteuert oder mit dem SSIS-Designer festlegen.

In diesem Abschnitt

Definieren einer Statusvariablen

Task-Editor für CDC-Steuerelement

Im Dialogfeld Task-Editor für CDC-Steuerelement können Sie den CDC-Steuerungstask konfigurieren. Die Konfiguration des CDC-Steuerungstasks beinhaltet das Definieren einer Verbindung mit der CDC-Datenbank, des CDC-Taskvorgangs und der Zustandsverwaltungsinformationen.

Weitere Informationen zum CDC-Steuerungstask finden Sie unter CDC Control Task.

So öffnen Sie den Task-Editor für CDC-Steuerelement

  1. Öffnen Sie in SQL Server Data Toolsdas SQL Server 2019 Integration Services (SSIS) -Paket, das den CDC-Steuerungstask enthält.

  2. Doppelklicken Sie auf der Registerkarte Ablaufsteuerung auf den CDC-Steuerungstask.

Optionen

ADO.NET-Verbindungs-Manager für die SQL Server-CDC-Datenbank
Wählen Sie in der Liste einen vorhandenen Verbindungs-Manager aus, oder klicken Sie auf Neu , um eine neue Verbindung zu erstellen. Die Verbindung muss zu einer SQL Server -Datenbank hergestellt werden, die für CDC aktiviert ist und in der sich die ausgewählte Änderungstabelle befindet.

CDC-Steuerungsvorgang
Wählen Sie den Vorgang aus, der für diesen Task ausgeführt werden soll. Für alle Vorgänge wird die Statusvariable verwendet, die in einer SSIS-Paketvariable gespeichert wird, die den Status speichert und zwischen verschiedenen Komponenten im Paket übergibt.

  • Beginn des anfänglichen Ladevorgangs kennzeichnen: Dieser Vorgang wird verwendet, wenn der anfängliche Ladevorgang aus einer aktiven Datenbank ohne Momentaufnahme erfolgt. Er wird zu Beginn eines Pakets für das anfängliche Laden verwendet, um die aktuelle LSN in der Quelldatenbank aufzuzeichnen, bevor das Paket für das anfängliche Laden mit dem Lesen der Quelltabellen beginnt. Für diesen Vorgang ist eine Verbindung mit der Quelldatenbank erforderlich.

    Wenn Sie bei Verwendung von SQL Server CDC (d.h. nicht Oracle) Beginn des anfänglichen Ladevorgangs kennzeichnen auswählen, muss der im Verbindungsmanager angegebene Benutzer entweder db_owner oder sysadmin sein.

  • Ende des anfänglichen Ladevorgangs kennzeichnen: Dieser Vorgang wird verwendet, wenn der anfängliche Ladevorgang aus einer aktiven Datenbank ohne Momentaufnahme erfolgt. Er wird am Ende eines Pakets zum anfänglichen Laden verwendet, um die aktuelle LSN in der Quelldatenbank aufzuzeichnen, nachdem das Paket für das anfängliche Laden das Lesen der Quelltabellen beendet hat. Diese LSN wird durch das Aufzeichnen der aktuellen Zeit, zu der dieser Vorgang aufgetreten ist, und das anschließende Abfragen der cdc.lsn_time_-Zuordnungstabelle in der CDC-Datenbank ermittelt. Dabei wird nach einer Änderung gesucht, die nach diesem Zeitpunkt aufgetreten ist.

    Wenn Sie bei Verwendung von SQL Server CDC (d.h. nicht Oracle) Ende des anfänglichen Ladevorgangs kennzeichnen auswählen, muss der im Verbindungsmanager angegebene Benutzer entweder db_owner oder sysadmin sein.

  • CDC-Start kennzeichnen: Dieser Vorgang wird verwendet, wenn der anfängliche Ladevorgang aus einer Momentaufnahmedatenbank oder einer inaktiven Datenbank erfolgt. Er wird an einem beliebigem Punkt im anfänglich geladenen Paket aufgerufen. Der Vorgang akzeptiert einen Parameter, bei dem es sich um eine Momentaufnahme-LSN oder den Namen einer Momentaufnahmedatenbank (von dem die Momentaufnahme-LSN automatisch abgeleitet wird) handeln kann. Der Parameter kann auch leer gelassen werden. In diesem Fall wird die aktuelle Datenbank-LSN als Start-LSN für das Änderungsverarbeitungspaket verwendet.

    Dieser Vorgang wird anstelle der Vorgänge "Beginn/Ende des anfänglichen Ladevorgangs kennzeichnen" verwendet.

    Wenn Sie bei Verwendung von SQL Server CDC (d.h. nicht Oracle) CDC-Start kennzeichnen auswählen, muss der im Verbindungsmanager angegebene Benutzer entweder db_owner oder sysadmin sein.

  • Verarbeitungsbereich abrufen: Dieser Vorgang wird in einem Änderungsverarbeitungspaket vor dem Aufrufen des Datenflusses verwendet, der den CDC-Quelldatenfluss verwendet. Dabei wird ein Bereich von LSNs eingerichtet, der vom CDC-Quelldatenfluss nach dem Aufrufen gelesen wird. Der Bereich wird in einer SSIS-Paketvariablen gespeichert, die von der CDC-Quelle während der Datenflussverarbeitung verwendet wird.

    Weitere Informationen zu den möglichen CDC-Status finden Sie unter Definieren einer Statusvariablen.

  • Verarbeiteten Bereich kennzeichnen: Dieser Vorgang wird in einem Änderungsverarbeitungspaket am Ende einer CDC-Ausführung (nachdem der CDC-Datenfluss erfolgreich abgeschlossen wurde) verwendet, um die letzte LSN aufzuzeichnen, die vollständig in der CDC-Ausführung verarbeitet wurde. Bei der nächsten Ausführung von GetProcessingRange bestimmt diese Position den Startpunkt für den nächsten Verarbeitungsbereich.

  • CDC-Status zurücksetzen: Dieser Vorgang wird verwendet, um den beständigen CDC-Status zurückzusetzen, der dem aktuellen CDC-Kontext zugeordnet ist. Nachdem dieser Vorgang ausgeführt wurde, wird die aktuelle höchste LSN aus der LSN-Zeitstempeltabelle sys.fn_cdc_get_max_lsn zum Startpunkt für den nächsten Verarbeitungsbereich. Für diesen Vorgang ist eine Verbindung zur Quelldatenbank erforderlich.

    Dieser Vorgang wird z. B. verwendet, wenn Sie nur die neu erstellten Änderungsdatensätze verarbeiten und alle alten Änderungsdatensätze ignorieren möchten.

Variable, die den CDC-Status enthält
Wählen Sie die SSIS-Paketvariable aus, die die Statusinformationen für den Taskvorgang speichert. Sie sollten vor Beginn eine Variable definieren. Wenn Sie Automatische Statuspersistenzauswählen, wird die Statusvariable automatisch geladen und gespeichert.

Weitere Informationen zum Definieren der Statusvariable finden Sie unter Definieren einer Statusvariablen.

SQL Server LSN, um CDC zu starten/Name der Momentaufnahme
Geben Sie die aktuelle Quelldatenbank-LSN oder den Namen der Momentaufnahmedatenbank ein, aus der der anfängliche Ladevorgang ausgeführt wird, um die Startposition für CDC zu bestimmen. Diese Option ist nur verfügbar, wenn CDC-Steuerungsvorgang auf CDC-Start kennzeichnenfestgelegt ist.

Weitere Informationen zu diesen Vorgängen finden Sie unter CDC Control Task.

Status automatisch in Datenbanktabelle speichern
Aktivieren Sie dieses Kontrollkästchen, damit der CDC-Steuerungstask das Laden und Speichern des CDC-Status in einer in der angegebenen Datenbank enthaltenen Statustabelle automatisch behandelt. Wird dieses Kontrollkästchen nicht aktiviert, muss der Entwickler den CDC-Status beim Start des Pakets laden und bei jeder Änderung des CDC-Status speichern.

Verbindungs-Manager für die Datenbank, in der der Status gespeichert wird
Wählen Sie in der Liste einen vorhandenen ADO.NET-Verbindungs-Manager aus, oder klicken Sie auf Neu, um eine neue Verbindung zu erstellen. Es handelt sich hierbei um eine Verbindung mit einer SQL Server -Datenbank, die die Statustabelle enthält. Die Statustabelle enthält die Statusinformationen.

Dieses Option ist nur verfügbar, wenn Automatische Statuspersistenz ausgewählt ist, und ist ein erforderlicher Parameter.

Tabelle zum Speichern des Status
Geben Sie den Namen der Statustabelle ein, die zum Speichern des CDC-Status verwendet werden soll. Die angegebene Tabelle muss zwei Spalten mit den Namen name und state enthalten, und beide Spalten müssen vom Datentyp varchar (256)sein.

Sie können optional "Neu" auswählen, um ein SQL-Skript abzurufen, das eine neue Statustabelle mit den erforderlichen Spalten erstellt. Bei Auswahl von Automatische Statuspersistenz muss der Entwickler eine den obigen Anforderungen entsprechende Statustabelle erstellen.

Dieses Option ist nur verfügbar, wenn Automatische Statuspersistenz ausgewählt ist, und ist ein erforderlicher Parameter.

Name des Zustands
Geben Sie einen Namen ein, der dem beständigen CDC-Status zugeordnet werden soll. In den Paketen für das vollständige Laden und den CDC-Paketen, die denselben CDC-Kontext verwenden, wird ein gemeinsamer Statusname angegeben. Dieser Name wird verwendet, um in der Statustabelle nach der Statuszeile zu suchen.