Change Data Capture (CDC) mit Azure SQL-Datenbank

Gilt für:Azure SQL-Datenbank

In diesem Artikel erfahren Sie mehr darüber, wie Change Data Capture (CDC) in Azure SQL-Datenbank implementiert ist, um Aktivitäten an einer Datenbank aufzuzeichnen, wenn Tabellen und Zeilen geändert wurden. Ausführliche Informationen zum CDC-Feature, darunter zur Implementierung in SQL Server und Azure SQL Managed Instance, finden Sie unter Was ist Change Data Capture (CDC)?

Übersicht

In Azure SQL-Datenbank ersetzt ein Change Data Capture-Planer die Aufgaben des SQL Server-Agents, die Change-Daten Quelltabellen erfassen und bereinigen. Der Planer führt die Erfassungs- und Bereinigungsprozesse automatisch im Geltungsbereich der Datenbank, sodurch Zuverlässigkeit und Leistung sichergestellt werden, ohne jegliche externe Abhängigkeit. Benutzer haben die Möglichkeit, Erfassungs- und Bereinigungsprozesse bei Bedarf manuell zu initiieren.

Ein gutes Beispiel für einen Datenconsumer, den diese Technologie verwendet, ist eine Anwendung zum Extrahieren, Transformieren und Laden (ETL-Anwendung). Eine ETL-Anwendung lädt Änderungsdaten inkrementell aus SQL Server-Quelltabellen in ein Data Warehouse oder Data Mart. Obwohl die Darstellung der Quelltabellen innerhalb des Data Warehouse Änderungen in den Quelltabellen widerspiegeln muss, sind End-to-End-Technologien, die eine Kopie der Quelle aktualisieren, ungeeignet. Benötigt wird stattdessen ein zuverlässiger Datenstrom von Änderungsdaten, der so strukturiert ist, dass er vom Consumer problemlos auf unterschiedliche Darstellungen der Daten in einer Zielumgebung angewendet werden kann. Change Data Capture in SQL Server stellt diese Technologie bereit.

Weitere Informationen zu Change Data Capture in Azur SQL Datenbank finden Sie in dieser Data Exposed-Folge:

Datenfluss

Die folgende Abbildung zeigt den Hauptdatenfluss für Change Data Capture mit Azure SQL Datenbank.

Diagram of a flow chart that depicts data flow for change data capture.

Voraussetzungen

Berechtigungen

Zum Aktivieren von Change Data Capture für Azure SQL-Datenbank ist die Rolle db_owner erforderlich.

Azure SQL-Datenbank – Computeanforderungen

Sie können CDC in Azure SQL-Datenbank für alle Dienstebenen innerhalb des vCore-basierten Kaufsmodells sowohl für Singletons als auch für Pools für elastische Datenbanken aktivieren.

Für Datenbanken im DTU-Kaufmodell wird CDC für Datenbanken auf der Ebene S3 oder höher unterstützt. Subcore-Ebenen (Basic, S0, S1 und S2) werden nicht für CDC unterstützt.

Aktivieren von CDC für Azure SQL-Datenbank

Bevor Sie eine Capture-Instanz für einzelne Tabellen erstellen können, müssen Sie CDC für Ihre Azure SQL-Datenbank aktivieren.

Stellen Sie für die Aktivierung von CDC mit Azure Data Studio oder SQL Server Management Studio (SSMS) eine Verbindung mit Ihrer Azure SQL-Datenbank her. Öffnen Sie ein neues Abfragefenster, und aktivieren Sie dann CDC, indem Sie folgenden T-SQL-Befehl ausführen:

EXEC sys.sp_cdc_enable_db;
GO

Hinweis

Um zu bestimmen, ob die Datenbank bereits aktiviert ist, fragen Sie die is_cdc_enabled-Spalte in der sys.databases-Katalogsicht ab.

Wenn für eine Datenbank Change Data Capture aktiviert ist, werden cdc schema, cdc user, Metadatentabellen und andere Systemobjekte für die Datenbank erstellt. cdc schema enthält die Metadatentabellen für Change Data Capture, und sobald CDC für die Quelltabellen aktiviert wurde, dienen die einzelnen Änderungstabellen als Repository für Änderungsdaten. cdc schema enthält außerdem zugeordnete Systemfunktionen, die verwendet werden, um Änderungsdaten abzufragen.

Wichtig

Change Data Capture erfordert die exklusive Verwendung von cdc schema und cdc user. Wenn entweder ein Schema oder ein Datenbankbenutzer namens cdc schon in der Datenbank vorhanden ist, können Sie für diese Datenbank cdc nicht aktivieren, bis das Schema und/oder der Benutzer abgelegt oder umbenannt wird.

Aktivieren von CDC für eine Tabelle

Nachdem Sie CDC für Ihre Azure SQL-Datenbank aktiviert haben, können Sie CDC auf Tabellenebene aktivieren, indem Sie eine oder mehrere Tabellen zum Nachverfolgen von Datenänderungen auswählen. Erstellen Sie eine Aufnahmeinstanz für einzelne Quelltabellen mithilfe der gespeicherten Prozedur sys.sp_cdc_enable_table.

Um CDC für eine Tabelle zu aktivieren, führen Sie den folgenden T-SQL aus:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

Tipp

Im vorherigen Beispiel wird der Parameter auf NULL festgelegt und somit kein expliziter @role_name verwendet, Sie können jedoch eine Gating-Rolle verwenden, um den Zugriff auf die Änderungsdaten zu beschränken.

Aufzuzeichnende Spalten in der Quelltabelle

Standardmäßig werden alle Spalten in der Quelltabelle als aufgezeichnete Spalten identifiziert. Wenn nur ein Teil der Spalten nachverfolgt werden soll, z. B. aus Gründen des Datenschutzes, dann geben Sie diese Teilmenge mithilfe des Parameters @captured_column_list an.

Um CDC für eine bestimmte Liste von Spalten in einer Tabelle zu aktivieren, führen Sie die folgende T-SQL-Datei aus:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

Tipp

Beachten Sie, dass im vorherigen Beispiel der Parameter auf NULL festgelegt und somit kein expliziter @role_name verwendet wird, Sie können jedoch eine Gating-Rolle verwenden, um den Zugriff auf die Änderungsdaten zu beschränken.

Eine Rolle zur Steuerung des Zugriffs auf eine Änderungstabelle

Der Zweck der benannten Rolle besteht darin, den Zugriff auf die Änderungsdaten zu steuern. Die angegebene Rolle kann eine vorhandene feste Serverrolle oder eine Datenbankrolle sein. Wenn die angegebene Rolle nicht bereits vorhanden ist, wird automatisch eine Datenbankrolle mit diesem Namen erstellt. Benutzer müssen über die SELECT-Berechtigung für alle aufgezeichneten Spalten der Quelltabelle verfügen. Ist eine Rolle angegeben, müssen Benutzer, die nicht Mitglieder der Rollen sysadmin oder db_owner sind, darüber hinaus Mitglieder der angegebenen Rolle sein.

Führen Sie zum Aktivieren von CDC für die Tabelle, die eine Gatingrolle angibt, die folgende T-SQL-Datei aus:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Wenn Sie keine Gating-Rolle verwenden möchten, legen Sie den Parameter @role_name explizit auf NULL fest.

Eine Funktion zum Abfragen der Nettoänderungen

Eine Erfassungsinstanz umfasst immer eine Tabellenwertfunktion, um alle Änderungstabelleneinträge zurückzugeben, die innerhalb eines definierten Intervalls auftraten. Diese Funktion wird benannt, indem der Name der Erfassungsinstanz an cdc.fn_cdc_get_all_changes_ angefügt wird. Weitere Informationen finden Sie unter cdc.fn_cdc_get_all_changes.

Wird der Parameter @supports_net_changes auf 1 festgelegt, wird auch eine Funktion für Nettoänderungen für die Aufzeichnungsinstanz generiert. Diese Funktion gibt für jede einzelne Zeile, die innerhalb des beim Aufruf angegebenen Intervalls geändert wurde, nur eine Änderung zurück. Weitere Informationen finden Sie unter cdc.fn_cdc_get_net_changes.

Zur Unterstützung von Abfragen für Nettoänderungen muss die Quelltabelle einen Primärschlüssel oder einen eindeutigen Index aufweisen, damit die Zeilen eindeutig identifiziert werden können. Wird ein eindeutiger Index verwendet, muss dessen Name mithilfe des Parameters @index_name angegeben werden. Die für den Primärschlüssel oder den eindeutigen Index definierten Spalten müssen in der Liste der aufgezeichneten Quellspalten enthalten sein.

Um CDC für eine Tabelle mit Unterstützung für Nettoänderungen zu aktivieren, führen Sie die folgende T-SQL aus:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

Wenn Change Data Capture für eine Tabelle mit einem vorhandenen Primärschlüssel aktiviert ist und der Parameter @index_name nicht zum Identifizieren eines alternativen eindeutigen Indexes verwendet wird, verwendet die Change Data Capture-Funktion den Primärschlüssel. Nachfolgende Änderungen am Primärschlüssel sind nicht zulässig, ohne zuerst Change Data Capture für die Tabelle zu deaktivieren. Dies gilt unabhängig davon, ob Unterstützung für Abfragen für Nettoänderungen angefordert wurde, als Change Data Capture konfiguriert wurde.

Wenn zum Zeitpunkt der Aktivierung für Change Data Capture für eine Tabelle kein Primärschlüssel vorhanden ist, wird das nachträgliche Hinzufügen eines Primärschlüssels von Change Data Capture ignoriert. Da Change Data Capture keinen Primärschlüssel verwendet, der nach der Aktivierung der Tabelle erstellt wurde, können der Schlüssel und die Schlüsselspalten ohne Einschränkungen entfernt werden.

Weitere Informationen zu den sys.sp_cdc_enable_table Argumenten der gespeicherten Prozedur finden Sie unter sys.sp_cdc_enable_table (Transact-SQL).

Tipp

Um zu bestimmen, ob eine Quelltabelle für Change Data Capture bereits aktiviert wurde, überprüfen Sie die is_tracked_by_cdc-Spalte in dersys.tables-Katalogsicht.

CDC für Azure SQL-Datenbank deaktivieren

Wenn Sie CDC für Ihre Azure SQL-Datenbank deaktivieren, werden alle zugehörigen Change Data Capture-Metadaten entfernt, einschließlich cdc user, cdc schema sowie der Erfassungs- und Bereinigungsprozesse des externen Planers. Durch Change Data Capture erstellte Gating-Rollen werden jedoch nicht automatisch entfernt und müssen explizit gelöscht werden.

Hinweis

Um zu bestimmen, ob in einer Datenbank CDC aktiviert ist, fragen Sie die is_cdc_enabled-Spalte in der sys.databases-Katalogsicht ab.

Es ist nicht notwendig, CDC für einzelne Tabellen zu deaktivieren, bevor Sie CDC auf Datenbankebene deaktivieren.

Führen Sie die folgende T-SQL aus, um CDC auf Datenbankebene zu deaktivieren:

EXEC sys.sp_cdc_disable_db;
GO

Tipp

Nachdem Sie CDC auf Datenbankebene deaktiviert haben, müssen Sie erneut CDC für einzelne Tabellen aktivieren, wenn Sie das CDC-Feature noch einmal verwenden möchten.

Verwalten von CDC

In Azure SQL-Datenbank ist CDC ein wichtiges Feature zum Nachverfolgen und Verwalten von Änderungen in Ihren Datenbanktabellen. Im Gegensatz zu herkömmlichen SQL Server-Umgebungen verwendet Azure SQL-Datenbank einen Change Data Capture-Planer, um CDC-Aufgaben zu verarbeiten, anstatt sich auf SQL Server-Agent-Aufträge zu verlassen. Dieser Scheduler initiiert automatisch regelmäßige Erfassungs- und Bereinigungsprozesse für CDC-Tabellen in Ihrer Datenbank, um Zuverlässigkeit und Leistung ohne externe Abhängigkeiten sicherzustellen.

Automatische CDC-Erfassung und -Bereinigung

Der CDC-Erfassungsjob in Azure SQL-Datenbank funktioniert nahtlos, wobei er alle 20 Sekunden ausgeführt wird, um Änderungen effizient nachzuverfolgen. Gleichzeitig wird der Bereinigungsauftrag jede Stunde ausgeführt, um sicherzustellen, dass die CDC-Tabellen optimiert bleiben. Benutzer können sicher sein, dass die CDC-Verwaltung automatisch ohne manuelle Eingriffe erfolgt.

Wichtig

Wenn eine serverlose Datenbank CDC aktiviert hat und sich in einem angehaltenen Zustand befindet, wird CDC nicht ausgeführt. Der CDC-Scan wirkt sich nicht auf das Autopause-Feature aus.

Manuelle CDC-Steuerung

Während CDC automatisch ausgeführt wird, bleibt Benutzern die Flexibilität, manuelle CDC-Operationen bei Bedarf auszuführen. Mit den Verfahren sp_cdc_scan und sp_cdc_cleanup_change_tables können Sie die Erfassungs- und Bereinigungsaufgaben nach Bedarf triggern.

CDC überwachen

Azure SQL-Datenbank bietet wertvolle Tools zur Überwachung von CDC-Aktivitäten. Zwei dynamische Verwaltungsansichten, sys.dm_cdc_log_scan_sessions und sys.dm_cdc_errors, bieten Einblicke in CDC-Prozesse, um sicherzustellen, dass Sie vollständige Sichtbarkeit Ihrer Datenänderungen haben.

CDC-Anpassung

Während Azure SQL-Datenbank die CDC-Verwaltung optimiert, gibt es einige Einschränkungen:

  • Die Häufigkeit der CDC-Erfassungs- und Bereinigungsjobs kann nicht angepasst werden.
  • Die Werte pollinginterval und continuous für Erfassungs- und Bereinigungsjobs sind in Azure SQL-Datenbank nicht verfügbar.
  • Durch das Entfernen des Erfassungsjobeintrags aus der Tabelle cdc.cdc_jobs wird der Hintergrunderfassungsjob nicht angehalten.
  • Durch das Ablegen des Bereinigungsjobs wird der Bereinigungsjob beendet.
  • Die cdc.cdc_jobs-Tabelle befindet sich im cdc-Schema, nicht msdb.

Trotz dieser Einschränkungen können Sie die folgenden Optionen anpassen:

  • Fragen Sie die cdc.cdc_jobs-Tabelle nach den aktuellen Konfigurationsdetails ab.
  • Passen Sie die Optionen maxtrans und maxscans mittels der gespeicherten Prozedur sp_cdc_change_job an.
  • Verwalten Sie Jobs, indem Sie nach Bedarf sp_cdc_drop_job und sp_cdc_add_job anwenden.

Leistungs-Überlegungen und -Empfehlungen

Das Aktivieren von Change Data Capture für Azure SQL-Datenbank hat eine ähnliche Auswirkung auf die Leistung wie die Aktivierung von CDC auf SQL Server oder Azure SQL Managed Instance. Die Auswirkung auf die Leistung beim Aktivieren von CDC wird jedoch durch mehrere Faktoren beeinflusst, darunter:

  • Anzahl der CDC-fähigen Tabellen in Ihrer Azure SQL-Datenbank.

  • Häufigkeit von Änderungen in den nachverfolgten Tabellen oder Volumen der Transaktionen. Aktive Transaktionen verhindern die Transaktionsprotokollkürzung, bis die Transaktion committet wird und CDC-Scan aufholt, oder die Transaktion endet. Dies kann dazu führen, dass sich das Transaktionsprotokoll mehr als üblich füllt und überwacht werden sollte, damit das Transaktionsprotokoll nicht voll wird.

  • Stellen Sie sicher, dass freier Speicherplatz in der Quelldatenbank verfügbar ist, da CDC-Artefakte (z. B. CT-Tabellen, cdc_jobs usw.) in derselben Datenbank gespeichert werden

  • Ganz gleich, ob Sie über ein Singleton verfügen oder diese Teil eines Pools für elastische Datenbanken ist.

  • Datenbanken in einem Pool für elastische Datenbanken nutzen Ressourcen (z. B. den Speicherplatz) gemeinsam. Daher besteht beim Aktivieren von CDC für mehrere Datenbanken das Risiko, dass die maximale Größe des Speicherplatzes des Pools für elastische Datenbanken belegt wird. Überwachen Sie Ressourcen wie CPU, Arbeitsspeicher und Protokolldurchsatz. Weitere Informationen finden Sie unter Ressourcenverwaltung in dichten Pools für elastische Datenbanken.

  • Beim Umgang mit Datenbanken in Pools für elastische Datenbanken ist es wichtig, die Anzahl der CDC-aktivierten Tabellen und die Anzahl der Datenbanken zu berücksichtigen, zu denen diese Tabellen gehören. Wir empfehlen, Ihren Workload zu bewerten und die erforderlichen Maßnahmen wie Skalierung des Pools für elastische Datenbanken zu ergreifen. Weitere Informationen finden Sie unter Skalieren von Ressourcen für Pools für elastische Datenbanken in Azure SQL-Datenbank.

Wichtig

Diese Überlegungen sind allgemeine Leitfäden. Um die Leistung für einen bestimmten Workload zu optimieren, wenden Sie sich an den Microsoft-Support.

Beachten Sie die folgenden bewährten Methoden, wenn Sie CDC mit Azure SQL-Datenbank verwenden:

  • Testen Sie Ihren Workload gründlich, bevor Sie CDC für Datenbanken in der Produktion aktivieren, um die geeignete SLO-Anpassung für Ihren Workload zu ermitteln. Weitere Informationen zu Azure SQL-Datenbank-Computegrößen finden Sie unter Dienstebenen.

  • Erwägen Sie, die Anzahl von virtuellen Kernen zu skalieren oder zu einer höheren Datenbankebene wie z. B. Hyperscale überzugehen, um das vorherige Leistungsniveau aufrechtzuerhalten, nachdem CDC für Ihre Azure SQL-Datenbank aktiviert wurde. Weitere Informationen finden Sie unter Kaufmodell für virtuelle Kerne: Azure SQL-Datenbank und Hyperscale-Dienstebene.

  • Überwachen Sie die Speicherplatzauslastung genau. Weitere Informationen finden Sie unter Verwalten von Dateispeicherplatz für Datenbanken in Azure SQL-Datenbank.

  • Überwachen Sie die Protokollerstellungsrate. Weitere Informationen finden Sie unter Ressourcenverbrauch durch Benutzerworkloads und interne Prozesse.

  • Die CDC-Scan- und Bereinigungsprozesse sind Teil Ihres normalen Datenbankworkloasd (und verbrauchen ebenfalls Ressourcen). Je nach Transaktionsvolumen kann die Leistungsbeeinträchtigung erheblich sein, da die Scan- und Bereinigungsprozesse nicht mit dem Workload Schritt halten, wenn ganze Zeilen zu Änderungstabellen hinzugefügt werden. Für Aktualisierungsvorgänge wird außerdem das Preimage eingeschlossen. Wir empfehlen, Ihren Workload zu bewerten und die erforderlichen Maßnahmen gemäß den vorherigen Empfehlungen zu ergreifen. Weitere Informationen finden Sie im Abschnitt CDC-Verwaltung in diesem Artikel.

Wichtig

Der Planer führt die Erfassung und Bereinigung automatisch innerhalb der SQL-Datenbank aus. Der CDC-Erfassungsauftrag wird alle 20 Sekunden ausgeführt, der Bereinigungsauftrag jede Stunde.

  • Um eine Verlängerung der Wartezeit zu verhindern, stellen Sie sicher, dass die Anzahl der CDC-fähigen Datenbanken nicht die Anzahl der virtuellen Kerne übersteigt, die einem Pool für elastische Datenbanken zugeteilt sind. Weitere Informationen finden Sie unter Ressourcenverwaltung in umfangreichen Pools für elastische Datenbanken.

  • Je nach Workload und Leistungsstufe sollten Sie in Erwägung ziehen, den CDC-Aufbewahrungszeitraum auf eine kleinere Zahl als die Standardzeit von drei Tagen zu ändern, um sicherzustellen, dass der Bereinigungsprozess mit Änderungen in der Änderungstabelle Schritt halten kann. Die Beibehaltung eines kürzeren Aufbewahrungszeitraums bei der Überwachung der Datenbankgröße eine bewährte Methode.

  • Es wird keine Vereinbarung zum Servicelevel (SLA) für den Fall bereitgestellt, dass Änderungen in den Änderungstabellen aufgefüllt werden. Auch Wartezeiten unter einer Sekunde werden nicht unterstützt.

Bekannte Probleme und Einschränkungen

Drastische Protokollkürzung

Wenn Sie Change Data Capture (CDC) in Azure SQL-Datenbank aktivieren, ist die aggressive Protokollkürzungsfunktion der beschleunigten Datenbankwiederherstellung (Accelerated Database Recovery, ADR) deaktiviert. Grund dafür ist, dass der CDC-Scan auf das Datenbanktransaktionsprotokoll zugreift. Aktive Transaktionen blockieren die Transaktionsprotokollkürzung bis die Transaktion committet wird und CDC-Scan aufholt, oder die Transaktion endet. Dies kann dazu führen, dass sich das Transaktionsprotokoll mehr als üblich füllt und überwacht werden sollte, damit das Transaktionsprotokoll nicht voll wird.

Beim Aktivieren von CDC empfehlen wir die Verwendung der Option „Fortsetzbarer Index“, wenn Sie einen Index erstellen oder neu erstellen. Fortsetzbare Indizes halten keine Transaktion mit langer Ausführungsdauer geöffnet und ermöglichen die Protokollabschneidung während des Vorgangs, was eine bessere Verwaltung des Protokollspeicherplatzes gestattet. Weitere Informationen finden Sie unter Richtlinien für Onlineindexvorgänge – Überlegungen zu fortsetzbaren Indizes.

Dienstebenen für Azure SQL-Datenbank.

Während CDC für Datenbanken und Pools für elastische Datenbanken in allen Dienstebenen innerhalb des vCore-basierten Kaufmodells unterstützt wird, werden Datenbanken unter S3 (z. B. Basic, S0, S1, S2) im DTU-Kaufmodell nicht unterstützt.

Azure SQL-Datenbank-Protokollbeschränkungen

Beschleunigte Datenbankwiederherstellung und CDC sind in Azure SQL-Datenbank nicht kompatibel. Dies liegt daran, dass der CDC-Scan aktiv auf das Datenbanktransaktionsprotokoll zugreift und mit diesem interagiert, was mit dem aggressiven Protokollkürzungsverhalten der ADR in Konflikt stehen kann.

Um Skalierbarkeits- und Speicherplatzverwaltungsprobleme zu vermeiden, überwachen Sie Ihre Azure SQL-Datenbank genau, und erwägen Sie die Skalierung auf eine höhere Datenbankebene und ermöglichen es Ihrem Transaktionsprotokoll, entsprechend Ihren Workloadanforderungen zu wachsen.

Tipp

Wenn Ihr Workload aufgrund eines höheren Transaktionsprotokolldurchsatzes und schnellerer Transaktions-Commitzeiten eine höhere Gesamtleistung erfordert, verwenden Sie die Hyperscale-Dienstebene.

Anpassung der Erfassung und der Bereinigung

Die Häufigkeit der Erfassungs- und Bereinigungsprozesse für CDC in Azure SQL-Datenbank kann nicht konfiguriert werden. Erfassung und Bereinigung werden vom Planer automatisch ausgeführt.

Failover in Azure SQL-Datenbank

Bei lokalen oder GeoDR-Failoverszenarien tritt bei Ihrer Datenbank mit aktiviertem CDC der Prozess der Erfassung und Bereinigung der Datenänderungen automatisch in der neuen primären Datenbank auf, nachdem der Failover erfolgt.

Microsoft Entra ID

Hinweis

Microsoft Entra ID war zuvor als Azure Active Directory (Azure AD) bekannt.

Wenn Sie in Azure SQL-Datenbank eine Datenbank als Microsoft Entra-Benutzer erstellen und CDC dafür aktivieren, kann ein SQL-Benutzer (z. B. sogar ein Benutzer mit der Rolle sysadmin) CDC-Artefakte nicht deaktivieren/ändern. Ein anderer Microsoft Entra Benutzer kann jedoch CDC für dieselbe Datenbank aktivieren/deaktivieren.

Wenn Sie eine Datenbank als SQL-Benutzer erstellen, funktioniert die Aktivierung/Deaktivierung von Change Data Capture als Microsoft Entra-Benutzer ebenfalls nicht.

Das Aktivieren von CDC schlägt fehl, wenn Sie eine Datenbank in Azure SQL-Datenbank als Microsoft Entra-Benutzer erstellen, CDC nicht aktivieren und dann versuchen, CDC nach dem Wiederherstellen der Datenbank zu aktivieren.

Um dieses Problem zu beheben, stellen Sie eine Verbindung mit Ihrer Datenbank mit Ihrem Microsoft Entra-Administratorkonto her, und führen Sie die folgende T-SQL aus:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Point-in-Time-Wiederherstellung

Wenn Sie CDC auf Ihrer Azure SQL-Datenbank als SQL-Benutzer aktiviert haben, behält die Point-in-Time-Wiederherstellung (PITR) die CDC in der wiederhergestellten Datenbank bei, es sei denn, es wird in einem Unterkern-SLO wiederhergestellt. Wenn sie in Subcore-SLO wiederhergestellt wurden, sind CDC-Artefakte nicht verfügbar.

Wenn Sie CDC als Microsoft Entra-Benutzer in Ihrer Datenbank aktivieren, ist es nicht möglich, eine Point-in-Time-Wiederherstellung (Zeitpunktwiederherstellung) in einem Subcore-SLO durchzuführen. Stellen Sie die Datenbank auf dasselbe oder ein höheres SLO als die Quelle wiederher und deaktivieren Sie dann bei Bedarf CDC.

Problembehandlung

Dieser Abschnitt enthält Anweisungen und Problembehandlungsschritte im Zusammenhang mit CDC für Azure SQL-Datenbank. Fehler im Zusammenhang mit CDC könnten die ordnungsgemäße Funktion des Erfassungsprozesses behindern und zur Vergrößerung des Datenbanktransaktionsprotokolls führen.

Um diese Fehler zu untersuchen, können Sie die dynamische Verwaltungssicht sys.dm_cdc_errors abfragen. Wenn die dynamische Verwaltungssicht sys.dm_cdc_errors Fehler zurückgibt, lesen Sie den folgenden Abschnitt, um zu erfahren, mit welchen Schritten Sie diese ausgleichen können.

Hinweis

Weitere Informationen zu einem bestimmten Fehlercode finden Sie unter Ereignisse und Fehler der Datenbank-Engine.

Dies sind die verschiedenen Problembehandlungskategorien, die in diesem Abschnitt enthalten sind:

Category Beschreibung
Metadaten geändert Enthält Informationen zum Ausgleich von Problemen im Zusammenhang mit CDC, wenn die nachverfolgte Tabelle geändert oder abgelegt wurde.
Datenbankspeicherplatzverwaltung Enthält Informationen zum Ausgleich von Problemen, wenn der Datenbankspeicher ausgelastet wurde.
CDC-Einschränkung Enthält Informationen zum Ausgleich von Problemen, die durch CDC-Einschränkungen verursacht werden.

Metadaten geändert

Fehler 200/208: Ungültiger Objektname

  • Ursache: Der Fehler kann auftreten, wenn CDC-Metadaten abgelegt wurden. Damit CDC ordnungsgemäß funktioniert, sollten Sie keine CDC-Metadaten wie z. B. CDC schema, Änderungstabellen, gespeicherte CDC-Systemprozeduren, standardmäßige cdc user-Berechtigungen (sys.database_principals) manuell ändern oder cdc user umbenennen.

  • Empfehlung: Um dieses Problem zu beheben, müssen Sie CDC für Ihre Datenbank deaktivieren und erneut aktivieren. Wenn Sie Change Data Capture für eine Datenbank aktivieren, werden das cdc-Schema, der cdc-Benutzer, Metadatentabellen und andere Systemobjekte für die Datenbank erstellt. Sie müssen CDC für einzelne Tabellen manuell erneut aktivieren, nachdem CDC für die Datenbank aktiviert wurde.

Hinweis

Objekte, die in der Systemkatalogsicht sys.objects mit is_ms_shipped=1 und schema_name=cdc gefunden werden, dürfen nicht geändert oder abgelegt werden.

Fehler 1202 – Datenbankprinzipal ist nicht vorhanden, oder der Benutzer ist kein Mitglied

  • Ursache: Der Fehler kann auftreten, wenn der CDC-Benutzer abgelegt wurde. Damit CDC ordnungsgemäß funktioniert, sollten Sie keine CDC-Metadaten wie z. B. CDC schema, Änderungstabellen, gespeicherte CDC-Systemprozeduren, standardmäßige cdc user-Berechtigungen (sys.database_principals) manuell ändern oder cdc user umbenennen.

  • Empfehlung: Stellen Sie sicher, dass der cdc-Benutzer in Ihrer Datenbank vorhanden ist und ihm außerdem die Rolle db_owner zugewiesen ist. Informationen zum Erstellen des cdc-Benutzers finden Sie im Beispiel Erstellen des CDC-Benutzers und Zuweisen einer Rolle.

Fehler 15517 – Ausführen als Datenbankprinzipal nicht möglich, da der Prinzipal nicht vorhanden ist

  • Ursache: Dieser Prinzipaltyp kann nicht per Identitätswechsel imitiert werden, oder Sie besitzen keine Berechtigung. Der Fehler kann auftreten, wenn CDC-Metadaten abgelegt wurden oder nicht mehr Teil der Rolle db_owner sind. Damit CDC ordnungsgemäß funktioniert, sollten Sie keine CDC-Metadaten wie z. B. CDC schema, Änderungstabellen, gespeicherte CDC-Systemprozeduren, standardmäßige cdc user-Berechtigungen (sys.database_principals) manuell ändern oder cdc user umbenennen.

  • Empfehlung: Stellen Sie sicher, dass der cdc-Benutzer in Ihrer Datenbank vorhanden ist und ihm außerdem die Rolle db_owner zugewiesen ist. Informationen zum Erstellen des cdc-Benutzers finden Sie im Beispiel Erstellen des CDC-Benutzers und Zuweisen einer Rolle.

Fehler 18807 – Für die Replikationssystemtabelle wurde keine Objekt-ID gefunden

  • Ursache: Dieser Fehler tritt auf, wenn SQL Server die Replikationssystemtabelle „%s“ nicht finden oder nicht darauf zugreifen kann. Dies kann darauf zurückzuführen sein, dass die Tabelle fehlt oder nicht erreichbar ist. Damit CDC ordnungsgemäß funktioniert, sollten Sie keine CDC-Metadaten wie z. B. CDC schema, Änderungstabellen, gespeicherte CDC-Systemprozeduren, standardmäßige cdc user-Berechtigungen (sys.database_principals) manuell ändern oder cdc user umbenennen.

  • Empfehlung Stellen Sie sicher, dass die Systemtabelle vorhanden ist und darauf zugegriffen werden kann, indem Sie die Tabelle direkt abfragen. Fragen Sie den Systemkatalog sys.objects ab, legen Sie die Prädikatklausel mit is_ms_shipped=1 und schema_name=cdc fest, um alle CDC-bezogenen Objekte aufzulisten. Wenn die Abfrage keine Objekte zurückgibt, sollten Sie CDC für Ihre Datenbank deaktivieren und erneut aktivieren. Wenn Sie Change Data Capture für eine Datenbank aktivieren, werden cdc schema, cdc user, Metadatentabellen und andere Systemobjekte für die Datenbank erstellt. Sie müssen CDC für einzelne Tabellen manuell erneut aktivieren, nachdem CDC für die Datenbank aktiviert wurde.

Fehler 21050 – Nur Mitglieder der festen Serverrolle „sysadmin“ oder „db_owner“ können diesen Vorgang ausführen.

  • Ursache: Der cdc-Benutzer wurde aus der Datenbankrolle db_owner oder der Serverrolle sysadmin entfernt.

  • Empfehlung: Stellen Sie sicher, dass dem cdc-Benutzer die Rolle db_owner zugewiesen ist. Informationen zum Erstellen des cdc-Benutzers finden Sie im Beispiel Erstellen des CDC-Benutzers und Zuweisen einer Rolle.

Datenbankspeicherplatzverwaltung

Fehler 1105 – Speicherplatz für das Objekt in der Datenbank konnte nicht zugeordnet werden, da die Dateigruppe voll ist

  • Ursache: Dieser Fehler tritt auf, wenn die primäre Dateigruppe einer Datenbank nicht genügend Speicherplatz aufweist und SQL-Datenbank innerhalb dieser Dateigruppe keinen weiteren Speicherplatz für ein Objekt (z. B. eine Tabelle oder einen Index) zuweisen kann.

  • Empfehlung: Um dieses Problem zu beheben, löschen Sie alle nicht benötigten Daten in Ihrer Datenbank, um Speicherplatz freizugeben. Identifizieren Sie nicht verwendete Tabellen, Indizes oder andere Objekte in der Dateigruppe, die sicher entfernt werden können. Überwachen Sie die Speicherplatznutzung genau. Weitere Informationen finden Sie unter Verwalten von Dateispeicherplatz für Datenbanken in Azure SQL-Datenbank.

    Falls das Ablegen nicht benötigter Daten/Objekte keine Option ist, ziehen Sie die Skalierung auf eine höhere Datenbankebene in Betracht.

Wichtig

Ausführliche Informationen über Computegrößen für Azure SQL-Datenbank (Singleton) (SLO) finden Sie unter Ressourcenlimits für Singletons mit dem auf virtuellen Kernen basierenden Kaufmodell und Ressourcengrenzwerte für Singletons, die das DTU-Kaufmodell verwenden: Azure SQL-Datenbank.

Fehler 1132 – Das Speicherlimit des Pools für elastische Datenbanken wurde erreicht.

  • Ursache: Dieser Fehler tritt auf, wenn die Speichernutzung in Ihrem Pool für elastische Datenbanken den zugewiesenen Grenzwert überschritten hat.

  • Empfehlung: Um dieses Problem zu beheben, implementieren Sie Strategien zur Datenarchivierung und -löschung, um nur die benötigten Daten in den Datenbanken beizubehalten, die zum Pool für elastische Datenbanken gehören. Überwachen Sie die Speicherplatzauslastung genau. Weitere Informationen finden Sie unter Verwalten von Dateispeicherplatz für Datenbanken in Azure SQL-Datenbank.

    Falls das Archivieren von Daten oder das Ablegen nicht benötigter Daten/Objekte keine Option ist, ziehen Sie die Skalierung auf eine höhere Datenbankebene in Betracht.

CDC-Einschränkung

Fehler 2628 – Zeichenfolgen- oder Binärdaten würden in der Tabelle abgeschnitten.

  • Ursache: Das Ändern der Größe von Spalten einer CDC-fähigen Tabelle mithilfe von DDL-Anweisungen kann zu Problemen mit dem nachfolgenden CDC-Captureprozess führen. Die dynamische Verwaltungsansicht (Dynamic Management View, DMV) sys.dm_cdc_errors ist nützlich, um CDC auf gemeldete Probleme zu überprüfen, z. B. Fehlernummer 2628 und 8115.

  • Empfehlung: Bevor Sie Änderungen an der Spaltengröße vornehmen, müssen Sie prüfen, ob die Änderung mit den vorhandenen Daten in CDC-Änderungstabellen kompatibel ist. Um dieses Problem zu beheben, müssen Sie CDC für Ihre Datenbank deaktivieren und erneut aktivieren. Weitere Informationen zum Aktivieren von CDC für eine Datenbank oder eine Tabelle finden Sie in den Abschnitten Aktivieren von CDC für Azure SQL-Datenbank oder Aktivieren von CDC für eine Tabelle in diesem Artikel.

Fehler 22830 – Die integrierte Funktion „SUSER_SNAME“ wird in dieser SQL Server-Version im Identitätswechselkontext nicht unterstützt.

  • Ursache: Dieser Fehler tritt beim Aktivieren von CDC auf, wenn es in der Datenbank einen Benutzertrigger mit einem Aufruf von SUSER_SNAME() in create_table gibt. Sie können Trigger mit dem folgenden Transact-SQL-Skript auflisten. Mit diesem Befehl werden die Details des Objekttriggers und das entsprechende object_id angezeigt:

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Nachdem Sie die Triggerdefinitionen abgerufen haben, können Sie mit dem folgenden Skript nach Aufrufen von SYSTEM_USER suchen:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Empfehlung: Führen Sie zum Beheben dieses Problems die folgenden Schritte für jeden mit dem vorherigen Skript ermittelten Benutzertrigger durch.

    • Den Trigger deaktivieren
    • Aktivieren von CDC
    • Den Trigger wieder aktivieren

Weitere Informationen finden Sie unter DISABLE TRIGGER (Transact-SQL).

Fehler 913 – CDC-Erfassungsjob schlägt beim Verarbeiten von Änderungen für eine Tabelle mit CLR-Systemdatentyp fehl.

  • Ursache: Dieser Fehler tritt auf, wenn CDC für eine Tabelle mit dem CLR-Systemdatentyp aktiviert wird, DML-Änderungen durchgeführt und dann DDL-Änderungen an derselben Tabelle vorgenommen werden, während der CDC-Erfassungsauftrag Änderungen verarbeitet, die sich auf andere Tabellen beziehen.

  • Empfehlung: Führen Sie die folgenden Schritte aus: legen Sie DML für die Tabelle still, führen Sie einen Erfassungsauftrag zum Verarbeiten von Änderungen aus, führen Sie DDL für die Tabelle aus, führen Sie einen Erfassungsauftrag zum Verarbeiten von DDL-Änderungen aus, und aktivieren Sie dann die DML-Verarbeitung erneut. Weitere Informationen finden Sie unter CDC-Erfassungsauftrag schlägt beim Verarbeiten von Änderungen fehl.

Erstellen eines Benutzers und Zuweisen einer Rolle

Wenn der cdc user entfernt wurde, können Sie den Benutzer manuell wieder hinzufügen.

Verwenden Sie das folgende T-SQL-Skript, um einen Benutzer (cdc) zu erstellen und die richtige Rolle für diesen zuzuweisen (db_owner).

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Überprüfen und Hinzufügen der Rollenmitgliedschaft

Führen Sie die folgende T-SQL-Abfrage aus, um zu überprüfen, ob der cdc-Benutzer der Rolle sysadmin oder db_owner angehört:

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

Wenn der cdc-Benutzer keiner dieser Rollen angehört, führen Sie die folgende T-SQL-Abfrage aus, um dem cdc-Benutzer die Rolle db_owner hinzuzufügen.

EXEC sp_addrolemember 'db_owner' , 'cdc';