Verbessern des inkrementellen Ladens mit Change Data Capture

In SQL Server bietet Change Data Capture eine wirksame Lösung für die Herausforderung, inkrementelles Laden aus Quelltabellen in Data Marts und Data Warehouses effizient auszuführen. 

Was ist Change Data Capture?

Quelltabellen ändern sich im Verlauf der Zeit. Ein Data Mart oder Data Warehouse, das auf diesen Tabellen basiert, muss diese Änderungen widerspiegeln. Ein Prozess, bei dem in regelmäßigen Abständen eine Momentaufnahme der gesamten Quelle gemacht wird, beansprucht jedoch zu viel Zeit und Ressourcen. Alternative Vorgehensweisen mit Timestampspalten, Triggern oder komplexen Abfragen beeinträchtigen oft die Leistung und erhöhen die Komplexität. Benötigt wird ein zuverlässiger Änderungsdatenstrom, der so strukturiert ist, dass er von Consumern problemlos auf Darstellungen der Daten in einer Zielumgebung angewendet werden kann. Change Data Capture in SQL Server stellt diese Lösung bereit.

Die Change Data Capture-Funktion von Database Engine (Datenbankmodul) erfasst Einfüge-, Aktualisierungs- und Löschvorgänge, die auf SQL Server-Tabellen angewendet werden, und stellt die einzelnen Änderungen in einem leicht verwendbaren relationalen Format zur Verfügung. Die von Change Data Capture verwendeten Änderungstabellen enthalten Spalten, die die Spaltenstruktur der nachverfolgten Quelltabellen widerspiegeln, sowie die Metadaten, die zum Verständnis der zeilenweise vorgenommenen Änderungen erforderlich sind.

HinweisHinweis

Change Data Capture ist nur in den Editionen SQL Server 2008 Enterprise und Developer sowie in der Evaluierungsversion verfügbar.

Weitere Informationen:Change Data Capture

Funktionsweise von Change Data Capture in Integration Services

Ein Integration Services-Paket kann auf einfache Weise die Änderungsdaten in der SQL Server-Datenbank sammeln, um ein effizientes inkrementelles Laden in ein Data Warehouse auszuführen. Bevor Sie jedoch mit Integration Services Änderungsdaten laden können, muss Change Data Capture von einem Administrator in der Datenbank und den Tabellen aktiviert werden, von denen Sie Änderungen erfassen möchten. Weitere Informationen zum Konfigurieren von Change Data Capture in einer Datenbank finden Sie unter Konfigurieren von Change Data Capture.

Sobald Change Data Capture von einem Administrator in der Datenbank aktiviert wurde, können Sie ein Paket erstellen, das ein inkrementelles Laden der Änderungsdaten ausführt. Das folgende Diagramm zeigt die Schritte für das Erstellen eines solchen Pakets, das ein inkrementelles Laden von einer einzelnen Tabelle ausführt:

Schritte der Change Data Capture-Paketerstellung

Wie im vorherigen Diagramm gezeigt wurde, umfasst das Erstellen eines Pakets, das ein inkrementelles Laden von Änderungsdaten ausführt, die folgenden Schritte:

  • Schritt 1: Entwerfen der Ablaufsteuerung
    In der Ablaufsteuerung vom Paket müssen die folgenden Tasks definiert werden:

    • Berechnen Sie die datetime-Werte für den Anfang und das Ende des Intervalls der Änderungen an den Quelldaten, die Sie abrufen möchten.

      Verwenden Sie einen Task "SQL ausführen" oder Integration Services-Ausdrücke mit datetime-Funktionen, um diese Werte zu berechnen. Speichern Sie dann diese Endpunkte in Paketvariablen für die spätere Verwendung im Paket.

      Weitere Informationen:Angeben eines Intervalls von Änderungsdaten

    • Bestimmen Sie, ob die Änderungsdaten für das ausgewählte Intervall bereit sind. Dieser Schritt ist notwendig, da der asynchrone Aufzeichnungsprozess möglicherweise noch nicht den ausgewählten Endpunkt erreicht hat.

      Wenn Sie bestimmen möchten, ob die Daten bereit sind, beginnen Sie mit einem For-Schleifencontainer, um die Ausführung bei Bedarf so lange zu verzögern, bis die Änderungsdaten für das ausgewählte Intervall bereit sind. Verwenden Sie innerhalb des Schleifencontainers einen Task "SQL ausführen", um die Time-Mapping-Tabellen abzufragen, die von Change Data Capture verwaltet werden. Verwenden Sie dann einen Skripttask, der die Thread.Sleep-Methode aufruft oder einen weiteren Task "SQL ausführen" mit einer WAITFOR-Anweisung, um die Ausführung des Pakets bei Bedarf vorübergehend zu verzögern. Verwenden Sie optional einen weiteren Skripttask, um eine Fehlerbedingung oder ein Timeout zu protokollieren.

      Weitere Informationen:Bestimmen, ob die Änderungsdaten bereit sind

    • Bereiten Sie die Abfragezeichenfolge vor, mit der die Änderungsdaten abgefragt werden.

      Verwenden Sie einen Skripttask oder einen Task "SQL ausführen", um die SQL-Anweisung zusammenzustellen, mit der Änderungen abgefragt werden.

      Weitere Informationen:Vorbereiten zur Abfrage der Änderungsdaten

  • Schritt 2: Einrichten der Abfrage von Änderungsdaten
    Erstellen Sie die Tabellenwertfunktion, die die Daten abfragt.

    Verwenden Sie SQL Server Management Studio, um die Abfrage zu entwickeln und zu speichern.

    Weitere Informationen:, Abrufen und Verstehen der Änderungsdaten

  • Schritt 3: Entwerfen des Datenflusses
    Im Datenfluss des Pakets müssen die folgenden Tasks definiert werden:

    • Rufen Sie die Änderungsdaten von den Änderungstabellen ab.

      Verwenden Sie eine Quellkomponente, um die Änderungstabellen nach den Änderungen abzufragen, die innerhalb des ausgewählten Intervalls liegen, um die Daten abzurufen. Die Quelle ruft eine Transact-SQL-Tabellenwertfunktion auf, die Sie zuvor erstellt haben müssen.

      Weitere Informationen:Abrufen und Verstehen der Änderungsdaten

    • Teilen Sie die Änderungen zur Verarbeitung in Einfügungen, Aktualisierungen und Löschungen auf.

      Wenn Sie die Änderungen aufteilen möchten, verwenden Sie eine Transformation für bedingtes Teilen, um Einfügungen, Aktualisierungen und Löschungen an verschiedene Ausgaben zur entsprechenden Verarbeitung weiterzuleiten.

      Weitere Informationen:Verarbeiten von Einfügungen, Aktualisierungen und Löschungen

    • Wenden Sie die Einfügungen, Löschungen und Aktualisierungen auf das Ziel an.

      Wenn Sie die Änderungen auf das Ziel anwenden möchten, verwenden Sie eine Zielkomponente, um die Einfügungen auf das Ziel anzuwenden. Verwenden Sie außerdem Transformationen für OLE DB-Befehl mit parametrisierten UPDATE- und DELETE-Anweisungen, um Aktualisierungen und Löschungen auf das Ziel anzuwenden. Sie können Aktualisierungen und Löschungen auch anwenden, indem Sie Zielkomponenten verwenden, um die Zeilen in temporäre Tabellen zu speichern. Verwenden Sie dann Tasks "SQL ausführen", um Massenaktualisierungen und Massenlöschungen auf dem Ziel von den temporären Tabellen auszuführen.

      Weitere Informationen:Anwenden der Änderungen auf das Ziel

Arbeiten mit Änderungsdaten von mehreren Tabellen

Der im vorherigen Diagramm und den Schritten beschriebene Prozess umfasst ein inkrementelles Laden aus einer einzelnen Tabelle. Wenn Sie ein inkrementelles Laden aus mehreren Tabellen ausführen müssen, ist der Gesamtprozess identisch. Der Entwurf des Pakets muss jedoch geändert werden, damit die Verarbeitung von mehreren Tabellen unterstützt wird. Weitere Informationen zum Erstellen eines Pakets, das ein inkrementelles Laden aus mehreren Tabellen ausführt, finden Sie unter Ausführen eines inkrementellen Ladens von mehreren Tabellen.

Anzeigen eines vollständigen Change Data Capture-Pakets

Integration Services stellt zwei Beispiele bereit, in denen veranschaulicht wird, wie Change Data Capture in Paketen verwendet wird. Weitere Informationen finden Sie in folgenden Themen:

Externe Ressourcen

Blogeintrag SSIS-Entwurfsmuster – Inkrementelles Laden auf sqlblog.com

Integration Services (kleines Symbol) Bleiben Sie mit Integration Services auf dem neuesten Stand

Die neuesten Downloads, Artikel, Beispiele und Videos von Microsoft sowie ausgewählte Lösungen aus der Community finden Sie auf der Integration Services-Seite von MSDN:


Abonnieren Sie die auf der Seite verfügbaren RSS-Feeds, um automatische Benachrichtigungen zu diesen Aktualisierungen zu erhalten.