Problembehandlung bei Fabric-gespiegelten Datenbanken aus Azure Database for PostgreSQL Flexible Server

In diesem Artikel werden die Schritte zur Fehlerbehebung bei der Replikation der Azure Database für PostgreSQL Flexible Server behandelt.

Problembehebung bei Fehler- oder Warnmeldungen während der Tabellenauswahl zur Spiegelung

Wenn Sie eine neue gespiegelte Datenbank erstellen, erhalten Sie auf der Seite " Daten auswählen " möglicherweise ein visuelles Feedback zu bestimmten Tabellen in der Quelldatenbank. Die folgende Tabelle enthält eine Liste potenzieller Probleme, einschließlich der angezeigten Meldung und der zugehörigen Beschreibung zur Lösung des Problems.

Statuscode Statustyp Nachricht Description
SCHEMA_DOES_NOT_EXIST FEHLER Schema {} ist nicht vorhanden Angegebenes Schema ist nicht vorhanden. Es könnte entfernt worden sein, während Fabric relevante Tabelleninformationen auszog. Wiederholen Sie den Vorgang.
TABLE_DOES_NOT_EXIST FEHLER In Schema {}ist die Tabelle {} nicht vorhanden. Die angegebene Tabelle ist nicht vorhanden. Es könnte entfernt worden sein, während Fabric relevante Tabelleninformationen abrufte. Wiederholen Sie den Vorgang.
FORBIDDEN_CHARS_IN_COLUMN_NAME FEHLER Tabelle {}.{} enthält unzulässige Zeichen im Namen von Spalten. {} Die angegebene Spalte hat ein nicht unterstütztes Zeichen im Spaltennamen. 1
UNSUPPORTED_DATA_TYPE FEHLER Tabelle {}.{} hat nicht unterstützten Datentyp in Spalte {} Eine (oder mehrere) Spalten der Tabelle weisen derzeit nicht unterstützte Datentypen auf. 3
FORBIDDEN_CHARS_IN_TABLE_NAME FEHLER Tabelle {}.{} enthält unzulässige Zeichen im Namen. Der Tabellenname enthält nicht unterstützte Zeichen. 1
NOT_REGULAR_TABLE FEHLER Tabelle {}. ist keine reguläre Tabelle.{} Der Tabellentyp wird für die Datenbankspiegelung nicht unterstützt. 2
HAS_PRIMARY_KEY OKAY Tabelle {}.{} hat einen Primärschlüssel Tabelle ist eine reguläre Tabelle und verfügt über einen gültigen Primärschlüssel, der für die Spiegelung verwendet wird.
HAS_UNIQUE_INDEX OKAY Tabelle {}.{} hat einen geeigneten eindeutigen Index Die Tabelle verfügt nicht über einen Primärschlüssel, verfügt aber über einen nicht nullfähigen eindeutigen Index, der für die Spiegelung verwendet werden soll. Eindeutige Indizes mit Nullwerten verursachen während der Replikationsphase einen Fehler und werden nicht unterstützt.
NO_INDEX_FULL_IDENTITY WARNUNG Tabelle {}.{} hat keinen geeigneten eindeutigen Index. Verwenden der vollständigen Identität Tabelle verfügt nicht über einen Primärschlüssel oder einen eindeutigen Index, daher ist REPLICA IDENTITY FULL erforderlich, um die Spiegelung zu unterstützen, was zu Leistungsproblemen und zusätzlicher WAL-Nutzung führen kann.

1 Objektbezeichner mit einem Leerzeichen (' ') werden nicht unterstützt.

2 Dieser Tabellentyp wird für die Spiegelung nicht unterstützt. Derzeit werden Ansichten, materialisierte Ansichten, Fremdtabellen und partitionierte Tabellen nicht unterstützt. TimescaleDB-Hypertables werden auch für Fabric-Mirroring nicht unterstützt.

3 Eine Liste der nicht unterstützten Datentypen finden Sie unter "Einschränkungen". Es werden nur Spalten mit folgenden Typen unterstützt:

  • bigint
  • bigserial
  • boolean
  • bytea
  • character
  • character varying
  • date
  • double precision
  • integer
  • numeric
  • real
  • serial
  • oid
  • money
  • smallint
  • smallserial
  • text
  • time without time zone
  • time with time zone (* nicht als Primärschlüssel)
  • timestamp without time zone
  • timestamp with time zone
  • uuid
  • xml
  • json
  • jsonb
  • inet
  • cidr
  • macaddr
  • macaddr8
  • tsvector
  • tsquery
  • int4range
  • int8range
  • numrange
  • tsrange
  • tstzrange
  • daterange
  • circle
  • line
  • lseg
  • box
  • path
  • point
  • polygon
  • interval

In Postgres werden zwei "Zeit mit Zeitzonen"-Werten, die genau demselben Moment entsprechen, aber in verschiedenen Zeitzonen als unterschiedlich betrachtet. Zum Beispiel: 06:24:00.59+05 und 05:24:00.59+04 entspricht der gleichen Epochenzeit, aber Postgres behandelt sie anders.

Standardmäßige nicht eingeschränkte numerische Spalten in Quelldatenbankschemas (ohne definierte Genauigkeit und Skalierung) werden in "Decimal128(38, 0)" konvertiert, bevor sie in OneLake-Tabellen repliziert werden und an der SQL-Standardkonvention ausgerichtet werden, die nicht angegebene Skalierung eine ganzzahlige Genauigkeit bedeutet.

Datendefinitionssprache (Data Definition Language, DDL)-Vorgänge, die in der Quelldatenbank unterstützt werden

  • Spalte umbenennen: Eine Spalte mit dem neuen Namen wird der gespiegelten Tabelle in Fabric hinzugefügt und enthält Daten für neu eingefügte Zeilen (für bestehende Zeilen enthält sie NULL). Alte Spalte wird weiterhin mit Werten für die vorhandenen Zeilen beibehalten (für neue Zeilen ist NULL).
  • Spalte hinzufügen: Die hinzugefügte Spalte ist in der gespiegelten Tabelle sichtbar und enthält Daten für neu eingefügte Zeilen (für vorhandene Zeilen sind NULL).
  • Spalte entfernen: Entfernte Spalte bleibt in der gespiegelten Tabelle sichtbar und enthält Daten für vorhandene Zeilen (für neue Zeilen sind NULL).
  • Primärschlüssel ändern: Die Spiegelungssitzung läuft regelmäßig weiter.

Alle anderen DDL-Vorgänge in Quelltabellen werden derzeit nicht unterstützt und können Replikationsfehler verursachen.

Änderungen an Fabric-Kapazität oder -Arbeitsbereich

Ursache Ergebnis Empfohlene Lösung
Fabric-Kapazität angehalten/gelöscht Spiegelung stoppen 1. Kapazität aus dem Azure-Portal wieder aufnehmen oder zuweisen
Wechseln Sie zu dem gespiegelten Datenbankelement von Fabric. Wählen Sie auf der Symbolleiste die Option "Replikation beenden" aus.
3. Starten Sie die Replikation, indem Sie die Spiegeldatenbank für das gespiegelte Element im Fabric-Portal auswählen.
Die Fabric-Kapazität wurde fortgesetzt Die Spiegelung wird nicht fortgesetzt. 1. Wechseln Sie zum gespiegelten Fabric-Datenbankelement. Wählen Sie auf der Symbolleiste die Option "Replikation beenden" aus.
2. Starten Sie die Replikation, indem Sie die Spiegeldatenbank für das gespiegelte Element im Fabric-Portal auswählen.
Arbeitsbereich gelöscht Die Spiegelung wird automatisch beendet. Wenn die Spiegelung weiterhin auf der flexiblen Azure-Datenbank für PostgreSQL-Server aktiv ist, melden Sie sich als Serveradministrator an und führen Sie die folgenden Befehle auf Ihrem PostgreSQL-Server aus: select azure_cdc.list_tracked_publications();, verwenden Sie dann den zurückgegebenen Publikationsnamen und führen Sie select azure_cdc.stop_publication(<publication_name>); aus.
Die Fabric-Testkapazität ist abgelaufen. Die Spiegelung wird automatisch beendet. Siehe Fabric-Testkapazität läuft ab.
Fabric-Kapazität überschritten Spiegelung von Pausen Warten Sie, bis der Überlastungszustand abgelaufen ist, oder aktualisieren Sie Ihre Kapazität. Erfahren Sie mehr über Aktionen, die Sie ausführen können, um aus Überlastungssituationen wiederherzustellen. Die Spiegelung wird fortgesetzt, sobald die Kapazität wiederhergestellt wurde.
Alle anderen Ressourcenfehler Spiegelung ist deaktiviert Um sicherzustellen, dass Ihre Computeressourcen nicht betroffen sind und die Auswirkungen auf den flexiblen Azure-Datenbankserver für PostgreSQL minimiert werden, deaktiviert die Spiegelung alle persistenten Ressourcenfehler.
Die Option "Benutzer können auf Daten zugreifen, die in OneLake gespeichert sind, mit Apps außerhalb von Fabric" ist deaktiviert. "Replizierer – Tabellen können den Replikationsstatus nicht erreichen" Aktivieren Sie die Mandanteneinstellung Benutzer können mit Apps außerhalb von Fabric auf Daten zugreifen, die in OneLake gespeichert sind.

SQL-Abfragen zur Problembehandlung

Wenn Spiegelungsprobleme auftreten, stellen Sie eine Verbindung mit der Quelle Azure Database for PostgreSQL Server her, und führen Sie diese Überprüfungen mithilfe von Systemansichten und Funktionen aus, um die Konfiguration zu überprüfen.

  1. Führen Sie die folgende Abfrage aus, um zu überprüfen, ob alle Voraussetzungen erfüllt sind, bevor Sie die CDC-Spiegelung starten. Diese Funktion überprüft verschiedene System- und Konfigurationsanforderungen, um sicherzustellen, dass der Server für CDC-Vorgänge bereit ist.
-- Check if all prerequisites are met
SELECT * FROM azure_cdc.check_prerequisites();

-- Example output when all checks pass (on mock mode with identity configured):
 status |                                                               data
--------+----------------------------------------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "details": {"current_value": "12", "required_value": "13"}, "status_code": "MAX_WORKER_PROCESSES_TOO_LOW"}]

-- Example output on standby replica:
 status |                                               data
--------+---------------------------------------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "SERVER_IN_RECOVERY"}]

-- Example output when identity not configured:
 status |                                data
--------+---------------------------------------------------------------------
 ERROR  | [{"status": "ERROR", "status_code": "IDENTITY_NOT_CONFIGURED"}]

Rückgabewerte:(status text, data jsonb)

  • status: Gesamtstatus - OK wenn alle Prüfungen bestehen, ERROR wenn eine Überprüfung fehlschlägt
  • data: JSONB-Array mit detaillierten Statuseinträgen mit status, status_codeund optional details

Statuscodes:

Statuscode Ebene Description
IDENTITY_NOT_CONFIGURED FEHLER Dienstprinzipal-Anmeldedaten sind nicht konfiguriert (azure.service_principal_id oder azure.service_principal_tenant_id GUCs sind nicht festgelegt)
CDC_ADMIN_ROLE_NOT_EXISTS FEHLER Die rolle "azure_cdc_admin" ist in der Datenbank nicht vorhanden.
USER_NOT_CDC_ADMIN FEHLER Der aktuelle Benutzer verfügt nicht über die rolle "azure_cdc_admin"
KEIN_ERSTELLUNGSRECHT_IN_DER_DATENBANK FEHLER Der aktuelle Benutzer verfügt nicht über CREATE-Berechtigungen für die Datenbank.
PUBLIKATIONSLIMIT_ERREICHT FEHLER Die maximale Anzahl von Publikationen (1) wurde für die Datenbank erreicht.
SERVER_IN_WIEDERHERSTELLUNG FEHLER Server ist ein Standby-Replikat im Wiederherstellungsmodus (CDC-Spiegelung wird nicht in Standbys unterstützt)
MAX_WORKER_PROCESSES_TOO_LOW FEHLER max_worker_processes liegt unter dem empfohlenen Schwellenwert (13)
  1. Führen Sie die folgende Abfrage aus, um zu überprüfen, ob Tabellen in Ihrer Quelldatenbank für die Replikation berechtigt sind. Schließt Systemschemas (pg_catalog, information_schema, pg_toast) und Erweiterungstabellen aus.
SELECT * FROM azure_cdc.get_all_tables_mirror_status();
 table_schema | table_name | mirroring_status |                      mirroring_data
--------------+------------+------------------+------------------------------------------------------
 public       | customers  | OK               | [{"status": "OK", "status_code": "HAS_PRIMARY_KEY"}]
 public       | orders     | OK               | [{"status": "OK", "status_code": "HAS_UNIQUE_INDEX"}]
 public       | logs       | WARNING          | [{"status": "WARNING", "status_code": "NO_INDEX_FULL_IDENTITY"}]

Gibt zurück: Menge von (table_schema text, table_name text, mirroring_status text, mirroring_data jsonb)

  • table_schema: Schemaname der Tabelle
  • table_name: Name der Tabelle
  • mirroring_status: Gesamtstatus - OK, WARNING, oder ERROR
  • mirroring_data: JSONB-Array mit detaillierten Statuseinträgen mit status, status_codeund optional details

Statuscodes:

Statuscode Ebene Description
SCHEMA_EXISTIERT_NICHT FEHLER Das angegebene Schema ist nicht vorhanden.
TABLE_EXISTIERT_NICHT FEHLER Die angegebene Tabelle ist im Schema nicht vorhanden.
VERBOTENE_ZEICHEN_IN_SPALTENNAMEN FEHLER Spaltennamen enthalten unzulässige Zeichen (z. B. Leerzeichen)
VERBOTENE_ZEICHEN_IM_TABELLENNAMEN FEHLER Der Tabellenname enthält unzulässige Zeichen.
UNSUPPORTED_DATA_TYPE WARNUNG Tabelle enthält Spalten mit nicht unterstützten Datentypen
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY FEHLER Nicht unterstützter Datentyp in Replikatidentitätsspalten (wenn kein eindeutiger Index vorhanden ist)
NOT_REGULAR_TABLE FEHLER Tabelle ist keine normale, permanente Tabelle (z. B. Ansicht, temporäre, Partition)
NICHT_TABELLENBESITZER FEHLER Der aktuelle Benutzer ist nicht der Besitzer der Tabelle.
HAT_PRIMÄRSCHLÜSSEL OKAY Tabelle hat einen Primärschlüssel
HAS_UNIQUE_INDEX OKAY Tabelle weist einen geeigneten eindeutigen Index auf
NO_INDEX_FULL_IDENTITY WARNUNG Kein geeigneter eindeutiger Index; Vollständige Zeilenidentität wird verwendet (kann sich auf die Leistung auswirken)
  1. Führen Sie die folgende Abfrage aus, um Fehler und Probleme zurückzugeben, die bei Replikationsvorgängen erkannt wurden, einschließlich systemweiter Fehler, publikationsspezifischer Fehler und Fehler pro Tabelle.
-- Get only system-wide errors
SELECT * FROM azure_cdc.get_health_status('', '');

-- Get system-wide errors and publication-specific errors
SELECT * FROM azure_cdc.get_health_status('my_database', 'my_publication');

Parameter:

  • db_name (text): Datenbankname
  • pub_name (text): Publikationsname

Benehmen:

  • Wird mit leeren Zeichenfolgen für beide Parameter aufgerufen (azure_cdc.get_health_status('', '')): Gibt nur systemweite Fehler zurück (Fehlertyp 'S').
  • Wird mit gültigen Datenbank- und Publikationsnamen aufgerufen: Gibt sowohl systemweite Fehler als auch publikationsspezifische Fehler/Tabellenspezifische Fehler für die angegebene Publikation zurück.

Gibt zurück: Menge von (error_time timestamptz, schema_name text, table_name text, error_type char(1), error_code text, params jsonb)

Fehlertypen:

Fehlertyp Description
S Systemweiter Fehler
P Publikationsspezifischer Fehler
T Tabellenspezifischer Fehler

Fehlercodes:

Fehlercode Typ Description
CDC_ERR_SYS_MAX_NUMBER_OF_WORKERS_REACHED - Die maximale Anzahl von Arbeitern im System wurde erreicht. S Maximale Anzahl der Arbeiter erreicht
CDC_ERR_SYS_MAX_NUMBER_OF_PUBLICATIONS_REACHED S Maximale Anzahl von Publikationen für die Datenbank erreicht
CDC_ERR_SYS_ONELAKE_PERMISSION_DENIED S Berechtigung verweigert für OneLake-Aktion
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST S OneLake-Artefakt nicht gefunden
CDC_ERR_SYS_ONELAKE_COMM_FAILED S OneLake-Kommunikation fehlgeschlagen
CDC_ERR_SYS_ONELAKE_FEHLERHAFTE_ANFRAGE S Ungültige Anforderung an OneLake
CDC_ERR_PUB_SNAPSHOT_TIMEOUT P Nach Timeout ist die Momentaufnahme nicht bereit.
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT P Snapshot-Worker-Timeout für eine bestimmte Tabelle
CDC_ERR_PUB_ONELAKE_PERMISSION_DENIED P Berechtigung verweigert für OneLake-Aktion
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P OneLake-Artefakt nicht gefunden
CDC_ERR_PUB_ONELAKE_COMM_FAILED P OneLake-Kommunikation fehlgeschlagen
CDC_ERR_PUB_MAX_ANZAHL_DER_ARBEITER_ERREICHT P Maximale Anzahl der für die Veröffentlichung erreichten Arbeitskräfte
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P Ungültige Anforderung an OneLake
CDC_ERR_PUB_TOO_MANY_ERRORS P Zu viele Fehler während der Publikationsverarbeitung
CDC_ERR_TABELLE_VERKÜRZUNG_UNTERSTÜTZT_NICHT T Abschneiden des Vorgangs nicht unterstützt (kann dazu führen, dass Daten inkonsistent sind)
  1. Führen Sie die folgende Abfrage aus, um zu überprüfen, ob die Publikation ordnungsgemäß erstellt wurde und replikationsänderungen ordnungsgemäß ablaufen:

    select * from azure_cdc.tracked_publications;
    

    Überprüfen Sie, ob die Publikation aktiv ist und Momentaufnahmen generiert wurden. Sie können auch überprüfen, ob nachfolgende Änderungsbatches durch Abfragen generiert wurden:

    select * from azure_cdc.tracked_batches;
    
  2. Wenn in der Ansicht keine Fortschritte bei der azure_cdc.tracked_publications Verarbeitung inkrementeller Änderungen angezeigt werden, führen Sie die folgende SQL-Abfrage aus, um zu überprüfen, ob Probleme gemeldet werden:

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. Wenn keine Probleme gemeldet werden, führen Sie den folgenden Befehl aus, um die aktuelle Konfiguration der gespiegelten PostgreSQL-Datenbank zu überprüfen. Bestätigen Sie, dass sie ordnungsgemäß aktiviert war.

    SELECT * FROM pg_replication_slots;
    

    Die wichtigsten Spalten, nach denen gesucht werden soll, sind slot_name und active. Ein beliebiger Wert neben t (true) gibt ein potenzielles Problem an.

  4. Wenden Sie sich an den Support, wenn eine Problembehandlung erforderlich ist.

Verwaltete Identität

Die vom System zugewiesene verwaltete Identität (System Assigned Managed Identity, SAMI) des flexiblen Azure-Datenbankservers für PostgreSQL muss aktiviert und die primäre Identität sein. Weitere Informationen finden Sie unter Systemzugewiesene verwaltete Identität für PostgreSQL Flexible Server.

Nach der Aktivierung, wenn der SAMI-Einstellungsstatus später deaktiviert und dann erneut aktiviert wird, schlägt die Spiegelung der Azure Database für PostgreSQL-Flexiblen-Server in Fabric OneLake fehl.

Stellen Sie sicher, dass das SAMI mit der folgenden Abfrage aktiviert ist: show azure.service_principal_id;

SAMI-Berechtigungen

Entfernen Sie keine Mitwirkendenberechtigungen der Azure-Datenbank für PostgreSQL Flexible Server System Assigned Managed Identity (SAMI) auf dem Element der Fabric-Spiegeldatenbank.

Wenn Sie versehentlich SAMI-Berechtigungen entfernen, funktioniert der flexible Server mit Spiegelung der Azure-Datenbank für PostgreSQL nicht wie erwartet. Es können keine neuen Daten aus der Quelldatenbank gespiegelt werden.

Wenn Sie die SAMI-Berechtigungen der Azure-Datenbank für PostgreSQL Flexible Server entfernen oder diese nicht ordnungsgemäß eingerichtet sind, führen Sie die folgenden Schritte aus.

  1. Fügen Sie den flexiblen Server namens SAMI als Benutzer hinzu, indem Sie die Option mit den ... Auslassungszeichen für das gespiegelte Datenbankelement auswählen.
  2. Wählen Sie die Option "Berechtigungen verwalten" aus.
  3. Geben Sie den Namen der Azure-Datenbank für den flexiblen Server für PostgreSQL ein. Bereitstellen von Lese - und Schreibberechtigungen .