Daten aus SQL Server-Datenbanken streamen

Diese Seite enthält Informationen zu:

  • Das Verhalten von Datastream beim Verarbeiten von Daten, die aus einer SQL Server-Quelldatenbank abgerufen werden.
  • Die von Datastream unterstützten Change Data Capture-Methoden (CDC).
  • Die Versionen von SQL Server-Datenbanken, die von Datastream unterstützt werden.
  • Bekannte Einschränkungen bei der Verwendung einer SQL Server-Datenbank als Quelle.

Verhalten

Datastream erfasst Änderungen der Datenbearbeitungssprache (Data Manipulation Language, DML) mit einer der folgenden CDC-Methoden:

Tabellen ändern

Mit der CDC-Methode für Änderungstabellen können Nutzer Protokolle für einen kürzeren Zeitraum aufbewahren und so Speicherplatz sparen. Sie unterstützt jedoch einen geringeren Durchsatz als die Methode für Transaktionsprotokolle. Die Methode hat weniger Einschränkungen als Transaktionsprotokolle. So wird beispielsweise das Risiko einer Logkürzung eliminiert, die zu einem dauerhaften Fehler von Streams führt, und die Replikation verschlüsselter Tabellen wird unterstützt. Weitere Informationen finden Sie unter Bekannte Einschränkungen.

Bei dieser CDC-Methode werden Änderungen an der Quelle mithilfe dedizierter Änderungstabellen erfasst. Transaktionslogs werden weiterhin verwendet, aber nur in begrenztem Umfang. Sie müssen sie nicht über einen längeren Zeitraum aufbewahren. Wenn DML-Ereignisse auf die Quelltabellen angewendet werden, werden die Änderungen in die entsprechenden Änderungstabellen repliziert. Die Änderungstabellen haben dieselbe Struktur wie die Quelltabellen, enthalten aber zusätzliche Spalten für die Metadaten der Änderungen. Nur festgeschriebene Transaktionen werden zusammen mit der Logsequenznummer (LSN) des Commit-Vorgangs in die Änderungstabellen eingefügt.

Umgang von Datastream mit DDL-Änderungen am Quellschema

Wenn Sie die CDC-Methode für Tabellenänderungen verwenden, werden Erfassungsinstanzen für jede Änderungstabelle erstellt. Jede Erfassungsinstanz ist mit einer Liste von Spalten verknüpft, die erfasst und verfolgt werden. Wenn nach dem Erstellen der Erfassungsinstanz eine Änderung der Datendefinitionssprache (Data Definition Language, DDL) in der Quelle erfolgt, wird die Änderung von der Instanz standardmäßig ignoriert. Sie können Ihren SQL Server-Stream jedoch so konfigurieren, dass Spalten repliziert werden, die dem Quellschema nach der Erstellung des Streams und der Erfassungsinstanz hinzugefügt werden.

Hinweis
  • Prüfen Sie, ob Ihrem Datastream-Nutzer die Berechtigung db_owner zugewiesen ist.

Spalten replizieren, die dem Quellschema hinzugefügt wurden

Damit Datastream die Replikation von Spalten unterstützt, die dem Quellschema nach der Erstellung eines Streams hinzugefügt wurden, müssen Sie Ihrem Stream das Label enable_ddl_support_for_ct hinzufügen:

  1. Rufen Sie in der Google Cloud Console die Seite Streams auf.

    Zur Seite „Streams“

  2. Klicken Sie auf den SQL Server-Stream, den Sie bearbeiten möchten.

  3. Klicken Sie auf der Seite Streamdetails auf Pausieren.

  4. Klicken Sie auf Bearbeiten > Streameinstellungen bearbeiten.

  5. Klicken Sie auf Label hinzufügen.

  6. Geben Sie im Feld Schlüssel enable_ddl_support_for_ct ein.

  7. Geben Sie im Feld Value (Wert) den Wert true ein.

  8. Klicken Sie auf Speichern.

  9. Klicke auf Starten, um den Stream fortzusetzen.

Datastream prüft die Tabelle cdc.ddl_history alle fünf Minuten auf neue DDLs. Wenn einer Tabelle, die in der Streamkonfiguration enthalten ist, eine neue Spalte hinzugefügt wird, prüft Datastream, ob die Tabelle zwei Erfassungsinstanzen hat:

  • Andernfalls wird in Datastream eine neue Erfassungsinstanz erstellt, die Daten der ursprünglichen Erfassungsinstanz bis zum Zeitpunkt des DDL-Ereignisses gelesen und dann mit dem Lesen der neuen Erfassungsinstanz begonnen.

  • Wenn dies der Fall ist, wird ein Logeintrag hinzugefügt, dass die DDL-Änderung nicht verarbeitet werden kann, da die maximale Anzahl von Erfassungsinstanzen erreicht ist.

Transaktionslogs

Bei dieser CDC-Methode liest Datastream Änderungen in der Quelle direkt aus Transaktionslogs. Diese Methode erfordert weniger Ressourcen und ermöglicht einen schnelleren Datenabruf, hat aber mehr Einschränkungen.

Um Datenverluste zu vermeiden, dürfen die Logs nicht abgeschnitten werden, bevor Datastream sie liest. Wenn Sie die Logdateien hingegen zu lange aufbewahren, belegen sie Speicherplatz, was dazu führen kann, dass die Datenbankinstanz in den schreibgeschützten Modus wechselt.

Damit das CDC-Lesegerät genügend Zeit hat, die Logs zu lesen, und gleichzeitig Speicherplatz durch das Kürzen von Logs freigegeben werden kann, sind zusätzliche Konfigurationsschritte erforderlich, z. B. das Ändern von Polling-Intervallen und das Einrichten einer Kürzungssicherung. Diese Schritte bieten eine zusätzliche Schutzebene, damit Datastream die Daten auch dann lesen kann, wenn es zu Ausfallzeiten auf der Datastream-Seite oder zu Verbindungsproblemen zwischen der Quelldatenbank und Datastream kommt.

Eine detaillierte Anleitung zum Anwenden dieser zusätzlichen Maßnahmen finden Sie auf der Seite SQL Server-Quelldatenbank konfigurieren. Wählen Sie dort Ihren Datenbanktyp aus.

Versionen

Datastream unterstützt die folgenden Versionen und Editionen von SQL Server-Datenbanken:

  • Selbstverwaltet (lokal oder in der Cloud gehostet) mit den folgenden Versionen:
    • Enterprise: 2008 und höher
    • Standard: 2016 SP1 und höher
    • Entwickler: 2008 und später
  • Amazon RDS for SQL Server
  • Azure SQL-Datenbank (ab Tarif S3).

  • Cloud SQL for SQL Server

Datastream unterstützt die folgenden Versionen von SQL Server-Datenbanken nicht:

  • SQL Server Standard Edition von Version 2008 bis 2014
  • SQL Server Express
  • SQL Server Web

Bekannte Einschränkungen

Für die Verwendung von SQL Server-Datenbanken als Quelle gelten unter anderem folgende bekannte Einschränkungen:

  • Streams sind auf 10.000 Tabellen beschränkt.
  • Eine Tabelle mit mehr als 500 Millionen Zeilen kann nur dann mit Daten aufgefüllt werden, wenn die folgenden Bedingungen erfüllt sind:
    1. Die Tabelle hat einen eindeutigen Index.
    2. Keine der Indexspalten kann Nullwerte enthalten.
    3. Alle Spalten des Index sind im Stream enthalten.
  • Datenbanken, für die die verzögerte Langlebigkeit oder die beschleunigte Datenbankwiederherstellung (Accelerated Database Recovery, ADR) aktiviert ist, werden nicht unterstützt.
  • Das Streamen von Änderungen an Systemtabellen wird nicht unterstützt.
  • Die Windows Active Directory-Authentifizierung (AD) wird nicht unterstützt.
  • Datastream unterstützt alle SQL Server-Sortierungen mit Ausnahme derer mit der Codepage 0. Wenn Sie die Codepage einer bestimmten Sortierung prüfen möchten, führen Sie die folgende Abfrage für Ihre SQL Server-Instanz aus:

    SELECT *, CAST(COLLATIONPROPERTY(name, 'CodePage') AS INT) FROM sys.fn_helpcollations() WHERE name = COLLATION_NAME;
    
  • Die folgenden Datentypen werden nicht unterstützt und nicht in das Ziel repliziert:

    • SQL_VARIANT
    • HIERARCHYID
  • Datastream repliziert benutzerdefinierte Datentypen. Im Ziel wird jedoch der Basisdatentyp gespeichert, aus dem Sie Ihren benutzerdefinierten Typ ableiten. Wenn Sie beispielsweise einen USERNAME-Datentyp basierend auf dem VARCHAR(50)-Datentyp definieren, werden die Daten im Ziel als VARCHAR(50) gespeichert.

  • Datastream unterstützt CDC für Spalten mit großen Objekten (TEXT, NTEXT, XML, IMAGE, GEOMETRY, GEOGRAPHY) und Spalten mit maximaler variabler Länge (VARCHAR(MAX), VARBINARY(MAX), NVARCHAR(MAX)) in Tabellen ohne eindeutigen Index nicht.

    Wenn Spalten für große Objekte nicht im Stream enthalten sind, wird CDC unterstützt.

  • Die Replikation der folgenden Änderungen am Quellschema wird bei Verwendung der CDC-Methode für Tabellenänderungen nicht unterstützt und kann zu Datenbeschädigung oder einem Fehler bei der Verarbeitung von Ereignissen führen:

    • Spalten werden entfernt: Daten in diesen Spalten werden durch NULL-Werte ersetzt.
    • Spalten umbenennen: Wird für SQL Server nicht unterstützt, wenn CDC aktiviert ist.
    • Datentypen ändern: Der SQL Server-CDC-Erfassungsjob überträgt nur die folgenden Änderungen des Datentyps:

      • Maximale Länge für Strings ändern, z. B. den Datentyp VARCHAR(50) in VARCHAR(100) ändern. Die BigQuery-Spalte STRING hat keine feste Länge und akzeptiert den längeren String.
      • Den Bereich für Ganzzahlwerte erweitern, z. B. den Datentyp INT in BIGINT ändern. Der BigQuery-Datentyp INT64 kann den neuen Typ aufnehmen, ohne dass eine Schemaänderung erforderlich ist.
      • Ändern der Genauigkeit und Skalierung für numerische Werte, z. B. Ändern des Datentyps DECIMAL(10, 2) in DECIMAL(18, 4). Der BigQuery-Typ NUMERIC hat eine große feste Genauigkeit (38) und Skalierung (9). Eine solche Änderung wird unterstützt.

      Bei anderen Änderungen des Datentyps versucht Datastream, die Daten in das Ziel einzufügen, und gibt einen Fehler aus, wenn die Daten abgelehnt werden.

  • Datastream unterstützt keine Replikation von Tabellen, die Spalten mit Datenmaskierung enthalten. Daten werden ohne Maskierung repliziert.

  • Datastream unterstützt die Replikation von Änderungen, die mithilfe des Data Tier Application Package (DACPAC) auf die Datenbank angewendet wurden, nicht.

  • Datastream repliziert keine Änderungen, die mit den Anweisungen WRITETEXT oder UPDATETEXT vorgenommen wurden.

  • Wenn Sie das Label enable_ddl_support_for_ct verwenden, um Spalten zu replizieren, die dem Quellschema hinzugefügt wurden, können Sie nicht mehrere Streams an dieselbe SQL Server-Quelltabelle anhängen. Da SQL Server maximal zwei Erfassungsinstanzen pro Tabelle unterstützt, können Schemataänderungen zu Race-Bedingungen führen, bei denen Datastream versucht, Erfassungsinstanzen zu erstellen. Dies kann dazu führen, dass Streams fehlschlagen.

  • Datastream unterstützt die Replikation von berechneten Spalten nur, wenn die Spalte mit PERSISTED gekennzeichnet ist.

  • Datastream unterstützt die Komprimierungstypen PAGE, COLUMNSTORE und COLUMNSTORE ARCHIVE nicht.

Zusätzliche Einschränkungen bei der Verwendung der Methode für Transaktionslogs

Wenn Sie die CDC-Methode für Transaktionslogs verwenden, gelten die folgenden zusätzlichen Einschränkungen:

  • Die transparente Datenverschlüsselung (Transparent Data Encryption, TDE) wird nicht unterstützt.
  • Die Verschlüsselung auf Spaltenebene wird nicht unterstützt. Die Daten in diesen Spalten werden durch NULL-Werte ersetzt.
  • Wenn Sie die CDC-Methode für Transaktionslogs verwenden, unterstützt Datastream nicht die Replikation von Spalten, die dem Quellschema nach der Erstellung eines Streams hinzugefügt wurden. Die neuen Spalten werden nicht in das Ziel repliziert.
  • Datastream unterstützt die Anweisung ROLLBACK TO SAVEPOINT nicht. Solche Rollback-Ereignisse werden ignoriert und nicht in das Ziel repliziert.
  • Datastream unterstützt CDC für Zeilen, die größer als 8 KB sind, in den folgenden Tabellentypen nicht:
    • Tabellen ohne eindeutigen Index
    • Tabellen, die nur einen eindeutigen, nicht gruppierten Index mit einer oder mehreren Spalten mit variabler Länge (VARCHAR, VARBINARY, NVARCHAR, GEOMETRY, GEOGRAPHY) enthalten
  • Datastream unterstützt CDC nicht für Spalten mit großen Objekten (TEXT, NTEXT, XML, IMAGE, GEOMETRY, GEOGRAPHY) in den folgenden Tabellentypen:

    • Tabellen ohne eindeutigen Index
    • Tabellen, die nur einen eindeutigen, nicht gruppierten Index mit einer oder mehreren Spalten mit variabler Länge (VARCHAR, VARBINARY, NVARCHAR, GEOMETRY, GEOGRAPHY) enthalten

    Wenn Spalten für große Objekte nicht im Stream enthalten sind, wird CDC für solche Tabellen nur unterstützt, wenn sie gültige Indexe haben.

  • Bei der Methode mit Transaktionsprotokollen fragt Datastream die Quelldatenbank ab, um fehlende Werte zu einem bestimmten Zeitpunkt in einem aktiven Suchvorgang abzurufen, der als Ergänzung bezeichnet wird. Die Ergänzung gilt für die Datentypen XML, TEXT, NTEXT, IMAGE, GEOMETRY und GEOGRAPHY sowie für Typen mit variabler Länge wie VARCHAR(MAX) oder VARBINARY, wenn Zeilen das Seitenlimit von 8 KB überschreiten. Da Datastream diese Spalten durch Abfragen der Datenbank ergänzt, werden Zwischenänderungen in Szenarien mit schnellen, aufeinanderfolgenden Aktualisierungen oder einem schnellen Löschen nach einem Einfügen möglicherweise nicht erfasst. DELETE-Vorgänge lösen keine Ergänzung aus. Diese Einschränkung ist besonders relevant, wenn Sie den Schreibmodus „Nur anhängen“ verwenden, bei dem alle Zwischenänderungen erfasst werden müssen.

Nächste Schritte