Bekannte Probleme und Fehler mit CDC
Gilt für:SQL ServerAzure SQL Managed Instance
In diesem Artikel werden bekannte Probleme und Fehler bei der Änderungsdatenerfassung (CDC) für SQL Server und Azure SQL verwaltete Instanz erläutert.
Informationen zu Azure SQL-Datenbank finden Sie unter Bekannte Probleme mit CDC in Azure SQL-Datenbank.
Ändern von Metadaten
Damit CDC ordnungsgemäß funktioniert, sollten Sie keine CDC-Metadaten wie CDC schema
, Tabellen ändern, GESPEICHERTe Prozeduren des CDC-Systems, Standardberechtigungen cdc user
(sys.database_principals
) oder umbenennen.cdc user
Alle Objekte in sys.objects mit is_ms_shipped
Eigenschaftensatz 1
sollten nicht geändert werden.
SELECT name AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,is_ms_shipped
FROM sys.objects
WHERE is_ms_shipped= 1 AND SCHEMA_NAME(schema_id) = 'cdc'
Sortierungsunterschiede
Es ist wichtig, sich einer Situation bewusst zu sein, in der Sie unterschiedliche Sortierungen zwischen der Datenbank und den Spalten einer Tabelle haben, die für die Änderungsdatenerfassung konfiguriert ist. CDC verwendet einen Zwischenspeicher, um Tabellen aufzufüllen. Wenn in einer Tabelle CHAR- oder VARCHAR-Spalten enthalten sind, deren Sortierung von der Datenbanksortierung abweicht, und wenn in diesen Spalten Zeichen enthalten sind, bei denen es sich nicht um ASCII-Zeichen handelt (z.B. Doppelbyte-Zeichensätze), kann CDC möglicherweise die geänderten Daten nicht speichern, damit diese mit den Daten in der Basistabelle übereinstimmen. Dies liegt daran, dass die Zwischenspeichervariablen keine Sortierungen zugeordnet sein können.
Berücksichtigen Sie einen der folgenden Ansätze, um sicherzustellen, dass erfasste Änderungsdaten mit Basistabellen konsistent sind:
Verwenden Sie die Datentypen NCHAR oder NVARCHAR für Spalten, die Daten enthalten, bei denen es sich nicht um ASCII-Daten handelt.
Stattdessen können Sie auch die Spalten und die Datenbank in derselben Reihenfolge sortieren.
Wenn Sie z.B. über eine Datenbank verfügen, die eine SQL_Latin1_General_CP1_CI_AS-Sortierung verwendet, beachten Sie die folgende Tabelle:
CREATE TABLE T1(
C1 INT PRIMARY KEY,
C2 VARCHAR(10) collate Chinese_PRC_CI_AI)
CDC kann möglicherweise die Binärdaten für die Spalte C2 nicht speichern, da deren Sortierung von dieser Sortierung abweicht (Chinese_PRC_CI_AI). Verwenden Sie NVARCHAR, um dieses Problem zu vermeiden:
CREATE TABLE T1(
C1 INT PRIMARY KEY,
C2 NVARCHAR(10) collate Chinese_PRC_CI_AI --Unicode data type, CDC works well with this data type
)
Beschleunigte Datenbankwiederherstellung (ADR) und Change Data Capure (CDC)
Derzeit wird das Aktivieren der Änderungsdatenerfassung (Change Data Capture, CDC) und der beschleunigten Datenbankwiederherstellung (Accelerated Database Recovery, ADR) nicht unterstützt. Wenn Sie die Änderungsdatenerfassung (Change Data Capture, CDC) auf SQL Server aktivieren, ist das aggressive Protokollabkürzungsfeature von ADR deaktiviert. Grund dafür ist, dass der CDC-Scan auf das Datenbanktransaktionsprotokoll zugreift. Aktive Transaktionen blockieren weiterhin die Transaktionsprotokollkürzung, bis die Transaktion committet wird und der CDC-Scan aufholt oder die Transaktion abgebrochen wird. Dies kann verschiedene Probleme verursachen, einschließlich des Transaktionsprotokolls, das mehr als gewöhnlich auffüllt, oder Datenvorgänge, die in der Seittabelle aufgezeichnet wurden, sind nicht ungewöhnlich.
Beim Aktivieren von CDC empfehlen wir die Verwendung der Option „Fortsetzbarer Index“. Resumable index doesn't require to keep open a long-running transaction to create or rebuild an index, allowing log truncation during this operation and better log space management. Weitere Informationen finden Sie in den Richtlinien für Onlineindexvorgänge – Überlegungen zum resumablen Index.
Das Aktivieren von CDC schlägt fehl, wenn das Schema oder der benannte cdc
Benutzer bereits vorhanden ist.
Wenn Sie CDC für eine Datenbank aktivieren, wird ein neues Schema und ein benutzer mit dem Namen erstellt cdc
. Das manuelle Erstellen eines benutzerdefinierten Schemas oder eines benannten cdc
Benutzers wird daher nicht empfohlen, da es für die Systemverwendung reserviert ist.
Wenn Sie manuell ein benutzerdefiniertes Schema oder einen in Ihrer Datenbank benannten cdc
Benutzer definiert haben, der nicht mit CDC verknüpft ist, kann die gespeicherte Systemprozedur sys.sp_cdc_enable_db
cdC in der Datenbank nicht mit der folgenden Fehlermeldung aktivieren.
Die Datenbank
<database_name>
kann nicht für die Änderungsdatenerfassung aktiviert werden, da ein Datenbankbenutzer namens "cdc" oder ein Schema mit dem Namen "cdc" bereits in der aktuellen Datenbank vorhanden ist. Diese Objekte sind ausschließlich von CDC erforderlich. Löschen Sie den Benutzer bzw. das Schema, oder benennen Sie ihn bzw. es um, und wiederholen Sie den Vorgang.
So beheben Sie dieses Problem:
- Löschen Sie das leere
cdc
-Schema und den leerencdc
-Benutzer manuell. Anschließend kann CDC erfolgreich in der Datenbank aktiviert werden.
CDC schlägt nach ALTER COLUMN zu VARCHAR und VARBINARY fehl
Wenn der Datentyp einer Spalte in einer CDC-fähigen Tabelle von TEXT
VARCHAR
oder IMAGE
zu VARBINARY
einer vorhandenen Zeile geändert wird, und eine vorhandene Zeile auf einen Off-Row-Wert aktualisiert wird. Nach dem Update führt der CDC-Scan zu Fehlern.
DDL-Änderungen an Quelltabellen
Das Ändern der Größe von Spalten einer CDC-fähigen Tabelle mithilfe von DDL-Anweisungen kann zu Problemen mit dem nachfolgenden CDC-Aufnahmeprozess führen, was zu Fehler 2628 oder Fehler 8115 führt. Denken Sie daran, dass Daten in CDC-Änderungstabellen basierend auf den vom Benutzer konfigurierten Einstellungen aufbewahrt werden. Bevor Sie also Änderungen an der Spaltengröße vornehmen, müssen Sie prüfen, ob die Änderung mit den vorhandenen Daten in CDC-Änderungstabellen kompatibel ist.
Wenn die sys.dm_cdc_errors
Angabe, dass Scans aufgrund des Fehlers 2628 oder Fehler 8115 für Änderungstabellen fehlschlagen, sollten Sie zuerst die Änderungsdaten in den betroffenen Änderungstabellen verwenden. Danach müssen Sie cdC auf der Tabelle deaktivieren und dann erneut aktivieren, um das Problem effektiv zu beheben.
Importieren einer Datenbank mithilfe von Datenebenen-Import-/Export- und Extraktions-/Veröffentlichungsvorgängen
Für CDC-aktivierte SQL-Datenbanken wird das Schema und der cdc
Benutzer ausgeschlossen, wenn Sie SqlPackage, SSDT oder andere SQL-Tools zum Importieren/Exportieren oder Extrahieren/Veröffentlichen verwenden. Andere CDC-Objekte, die nicht in Import-/Export- und Extract/Deploy-Vorgängen enthalten sind, sind die Tabellen, die als is_ms_shipped=1
"sys.objects" gekennzeichnet sind.
Selbst wenn CDC nicht aktiviert ist und Sie ein benutzerdefiniertes Schema oder einen in Ihrer Datenbank benannten cdc
Benutzer definiert haben, der auch in Import-/Export- und Extract/Deploy-Vorgängen ausgeschlossen wird, um eine neue Datenbank zu importieren/einzurichten.
Partitionswechsel mit Variablen
Die Verwendung von Variablen mit Partitionswechsel in Datenbanken oder Tabellen mit Änderungsdatenerfassung (Change Data Capture, CDC) wird für die ALTER TABLE ... SWITCH TO ... PARTITION ...
Anweisung nicht unterstützt. Weitere Informationen finden Sie unter Einschränkungen zu Partitionswechseln.
Problembehandlung von Fehlern
In diesem Abschnitt wird beschrieben, wie Sie Fehler im Zusammenhang mit CDC auf SQL Server und Azure SQL verwaltete Instanz beheben können. Fehler im Zusammenhang mit CDC können 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 sys.dm_cdc_errors dynamische Verwaltungsansicht Fehler zurückgibt, lesen Sie den folgenden Abschnitt, um die Entschärfungsschritte zu verstehen.
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
CDC schema
, Tabellen ändern, GESPEICHERTe Prozeduren des CDC-Systems, Standardberechtigungencdc user
(sys.database_principals
) oder umbenennen.cdc user
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.
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 gelöscht 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
CDC schema
, Tabellen ändern, GESPEICHERTe Prozeduren des CDC-Systems, Standardberechtigungencdc user
(sys.database_principals
) oder umbenennen.cdc user
Empfehlung: Stellen Sie sicher, dass der
cdc
-Benutzer in Ihrer Datenbank vorhanden ist und ihm außerdem die Rolledb_owner
zugewiesen ist. Informationen zum Erstellen descdc
-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 wieCDC schema
, Tabellen ändern, GESPEICHERTe Prozeduren des CDC-Systems, Standardberechtigungencdc user
(sys.database_principals
) oder umbenennen.cdc user
Empfehlung: Stellen Sie sicher, dass der
cdc
-Benutzer in Ihrer Datenbank vorhanden ist und ihm außerdem die Rolledb_owner
zugewiesen ist. Informationen zum Erstellen descdc
-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
CDC schema
, Tabellen ändern, GESPEICHERTe Prozeduren des CDC-Systems, Standardberechtigungencdc user
(sys.database_principals
) oder umbenennen.cdc user
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 das cdc-Schema, der cdc-Benutzer, Metadatentabellen und andere Systemobjekte für die Datenbank erstellt.
Fehler 21050 – Nur Mitglieder der festen Serverrolle „sysadmin“ oder „db_owner“ können diesen Vorgang ausführen.
Ursache: Der
cdc
-Benutzer wurde aus der Datenbankrolledb_owner
oder der Serverrollesysadmin
entfernt.Empfehlung: Stellen Sie sicher, dass dem
cdc
-Benutzer die Rolledb_owner
zugewiesen ist. Informationen zum Erstellen descdc
-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 Server 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 unnötiger Daten/Objekte keine Option ist, sollten Sie mehr Speicherplatz für Ihr Datenbanktransaktionsprotokoll zuordnen. Weitere Informationen zur Verwaltung von Transaktionsprotokollen finden Sie in der SQL Server-Transaktionsprotokollarchitektur und im Verwaltungshandbuch
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 tabelle finden Sie unter Aktivieren von CDC für eine Datenbank und Aktivieren von CDC für eine Tabelle.
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';
Nächste Schritte
- Eine Übersicht über CDC für SQL Server finden Sie unter Was ist die Änderungsdatenerfassung (CDC)?
- Weitere Informationen zu bekannten Problemen und Einschränkungen für CDC mit Azure SQL-Datenbank finden Sie unter CDC bekannte Probleme und Einschränkungen mit Azure SQL-Datenbank
- Weitere Informationen zum Aktivieren und Deaktivieren von CDC finden Sie unter Aktivieren und Deaktivieren der Änderungsdatenerfassung.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für