Probleme bei der Datenintegration von SQL Server beheben

Diese Seite beschreibt häufige Probleme mit dem Microsoft SQL Server-Connector in Databricks Lakeflow Connect und wie sie behoben werden.

Allgemeine Anleitungen zur Problembehandlung, die für alle verwalteten Erfassungspipelinen gelten, finden Sie unter "Problembehandlung für verwaltete Erfassungspipelinen".

Überprüfen, ob CDC für eine Datenbank oder eine Tabelle aktiviert ist

So überprüfen Sie, ob CDC für die Datenbank <database-name>aktiviert ist:

select is_cdc_enabled from sys.databases where name='<database-name>';

So überprüfen Sie, ob CDC für die Tabelle <schema-name>.<table-name>aktiviert ist:

select t.is_tracked_by_cdc
from sys.tables t join sys.schemas s on t.schema_id = s.schema_id
where s.name='<schema-name>' and t.name='<table-name>';

Überprüfen, ob die Änderungsnachverfolgung für eine Datenbank oder eine Tabelle aktiviert ist

So überprüfen Sie, ob die Änderungsnachverfolgung für die Datenbank\<database-name\> aktiviert ist:

select ctdb.*

from sys.change_tracking_databases ctdb join sys.databases db

    on db.database_id  = ctdb.database_id

where db.name = '<MyDatabaseName>'

So überprüfen Sie, ob die Änderungsnachverfolgung für die Tabelle <schema-name>.<table-name>aktiviert ist:

select s.name schema_name, t.name table_name, ct.*

from sys.change_tracking_tables ct join sys.tables t

    on ct.object_id = t.object_id

    join sys.schemas s on t.schema_id = s.schema_id

where s.name = '<MySchemaName>' and t.name = '<MyTableName>'

Timeout beim Warten auf Tabellen-Token

Die Aufnahmepipeline kann eine Zeitüberschreitung erfahren, während sie darauf wartet, dass Informationen vom Gateway bereitgestellt werden. Dies kann darauf zurückzuführen sein:

  • Sie führen eine ältere Version des Gateways aus.
  • Fehler beim Generieren der erforderlichen Informationen. Überprüfen Sie die Gatewaytreiberprotokolle auf Fehler.

Hinweis

Der vollständige Aktualisierungsfluss reduziert das Auftreten von Timeoutfehlern während vollständiger Aktualisierungsvorgänge erheblich. Siehe vollständiges aktualisierungsverhalten (CDC).

Standardauthentifizierung: Standardanmeldeinformationen können nicht konfiguriert werden

Wenn Diese Fehlermeldung angezeigt wird, liegt ein Problem beim Ermitteln der aktuellen Benutzeranmeldeinformationen vor. Versuchen Sie, Folgendes zu ersetzen:

w = WorkspaceClient()

Durch:

w = WorkspaceClient(host=input('Databricks Workspace URL: '), token=input('Token: '))

Siehe Authentifizierung im Databricks SDK für Python-Dokumentation.

tech.replicant.common.ExtractorException: com.microsoft.sqlserver.jdbc.SQLServerException: Ungültiger Spaltenname 'SERIAL_NUMBER'.

Diese Fehlermeldung wird möglicherweise angezeigt, wenn Sie eine ältere Version einer internen Tabelle verwenden. Führen Sie folgendes in der verbundenen Datenbank aus:

drop table dbo.replicate_io_audit_ddl_trigger_1;

PERMISSION_DENIED: Sie sind nicht berechtigt, Cluster zu erstellen. Wenden Sie sich an Ihren Administrator.

Wenden Sie sich an einen Databricks-Kontoadministrator, um Ihnen Unrestricted cluster creation Berechtigungen zu gewähren.

DLT-FEHLERCODE: INGESTION_GATEWAY_INTERNER_FEHLER

Überprüfen Sie die stdout Dateien in den Treiberprotokollen.

Konflikt bei der Benennung der Quelltabelle

Ingestion pipeline error: "org.apache.spark.sql.catalyst.ExtendedAnalysisException: Cannot have multiple queries named `XYZ_snapshot_load` for `XYZ`. Additional queries on that table must be named. Note that unnamed queries default to the same name as the table.

Dies deutet darauf hin, dass ein Namenskonflikt aufgrund mehrerer Quelltabellen besteht, die in verschiedenen Quellschemas XYZ benannt sind und von derselben Aufnahmepipeline in dasselbe Zielschema übernommen werden.

Erstellen Sie mehrere Gateway-Pipeline-Paare, die diese konfliktbehafteten Tabellen in verschiedene Zielschemen schreiben.

Inkompatible Schemaänderungen

Eine inkompatible Schemaänderung führt dazu, dass die Aufnahmepipeline mit einem INCOMPATIBLE_SCHEMA_CHANGE Fehler fehlschlägt. Um die Replikation fortzusetzen, lösen Sie eine vollständige Aktualisierung der betroffenen Tabellen aus.

Hinweis

Databricks kann nicht garantieren, dass zum Zeitpunkt, an dem die Aufnahmepipeline aufgrund einer inkompatiblen Schemaänderung fehlschlägt, alle Zeilen vor der Schemaänderung bereits aufgenommen wurden.

NICHT_INKREMENTELLE_SCHEMAÄNDERUNG

NON_INCREMENTAL_SCHEMA_CHANGE: Column '<column>' was added to table '<table>'. A full refresh is required to continue incremental ingestion.

Dieser Fehler tritt auf, wenn einer Quelltabelle eine neue Spalte hinzugefügt wird, während die inkrementelle Erfassung aktiv ist. Der Connector kann keine Werte für die neue Spalte aus historischen Änderungsdaten zurückfüllen, sodass eine vollständige Aktualisierung erforderlich ist.

Führen Sie eine vollständige Neuladung der betroffenen Tabelle aus, um die Datenaufnahme fortzusetzen. Weitere Informationen finden Sie unter "Vollständige Aktualisierung von Zieltabellen".

MISSING_TABLE_IN_SOURCE

MISSING_TABLE_IN_SOURCE: Table '<schema>.<table>' could not be found in the source database.

Dieser Fehler tritt auf, wenn eine Tabelle, die zuvor in der Quelldatenbank verfügbar war, nicht mehr gefunden werden kann. Häufige Ursachen sind:

  • Die Tabelle wurde in der Quelle umbenannt oder gelöscht.
  • Die Tabelle ist vorübergehend nicht verfügbar, z. B. während eines Wartungsfensters.

Behebung:

  • Wenn die Tabelle vorübergehend nicht verfügbar ist, warten Sie, bis die Wartung abgeschlossen ist, und führen Sie die Pipeline dann erneut aus.
  • Wenn die Tabelle umbenannt oder neu erstellt wurde, führen Sie eine vollständige Aktualisierung der betroffenen Tabelle aus.
  • Wenn die Tabelle absichtlich gelöscht wurde, entfernen Sie sie aus der Pipeline.

HTTP 403-Fehler beim Zugriff auf Azure Storage

Wenn Ihre Pipeline mit einem Fehler wie INTERNAL_ERROR: Server returned HTTP response code: 403 for URLversagt, hat Ihr Compute möglicherweise keinen Zugriff auf den Azure-Speicher-Endpunkt, der vom SQL Server-Connector verwendet wird.

Führe die folgenden Tests in einem Azure Databricks-Notebook durch, um das Problem zu isolieren. Nutze sie dbutils.secrets , um dein Shared-Access-Signaturtoken (SAS) abzurufen, anstatt es fest zu programmieren.

Testzugriff zum DFS-Endpunkt (ADLS Gen2)

Der folgende Ausschnitt listet, liest und schreibt auf den Azure Data Lake Storage (ADLS) Gen2-Endpunkt, auch als Distributed File System (DFS)-Endpunkt bezeichnet. Ersetzen Sie die Platzhalterwerte durch Details Ihres Speicherkontos, Ihres Containers und Ihrer Geheimnisse und führen Sie es dann aus, um zu bestätigen, ob das SAS-Token den DFS-Endpunkt erreichen kann:

storage_account = "<storage-account>"
container = "<container>"
sas_token = dbutils.secrets.get(scope="<scope>", key="<key>")

spark.conf.set(
    f"fs.azure.sas.{container}.{storage_account}.dfs.core.windows.net",
    sas_token
)

base_path = f"abfss://{container}@{storage_account}.dfs.core.windows.net/"

# List contents
display(dbutils.fs.ls(base_path))

# Read a file
df = spark.read.format("parquet").load(base_path + "<path-to-file>")
display(df.limit(10))

# Write a test file
df.write.format("delta").save(base_path + "_connectivity_test")

Testzugriff auf den Blob-Endpunkt

Wenn der DFS-Test erfolgreich ist, aber deine Pipeline trotzdem fehlschlägt, könnte der Connector stattdessen den Blob-Endpunkt verwenden. Der folgende Ausschnitt führt dieselben Listen-, Lese- und Schreibprüfungen gegen den Blob-Endpunkt aus:

storage_account = "<storage-account>"
container = "<container>"
sas_token = dbutils.secrets.get(scope="<scope>", key="<key>")

spark.conf.set(
    f"fs.azure.sas.{container}.{storage_account}.blob.core.windows.net",
    sas_token
)

base_path = f"wasbs://{container}@{storage_account}.blob.core.windows.net/"

# List files
display(dbutils.fs.ls(base_path))

# Read a file
df = spark.read.format("parquet").load(base_path + "<path-to-file>")
display(df.limit(10))

# Write a test file
df.write.format("delta").save(base_path + "_connectivity_test")

Wenn einer der Tests einen 403-Fehler zurückgibt, fehlen dem SAS-Token die erforderlichen Berechtigungen oder es deckt nicht den korrekten Endpunkt ab. Überprüfen Sie, dass das SAS-Token dem Container mindestens Lese- und Listenberechtigungen gewährt, und generieren Sie ihn bei Bedarf neu.

TLS-Serverzertifikatfehler

Informationen zur Problembehandlung bei TLS-Zertifikatüberprüfungsfehlern finden Sie unter Problembehandlung bei TLS-Zertifikatfehlern.