Problemen met Fabric-gedupliceerde databases van de flexibele serverinstantie Azure Database voor PostgreSQL oplossen

In dit artikel worden stappen beschreven voor probleemoplossing voor het spiegelen van flexibele Azure Database for PostgreSQL-servers.

Fout-/waarschuwingsberichten oplossen tijdens het selecteren van tabellen voor spiegeling

Wanneer u een nieuwe gespiegelde database maakt, ontvangt u op de pagina Gegevens kiezen mogelijk visuele feedback over specifieke tabellen in de brondatabase. De volgende tabel bevat een lijst met mogelijke problemen, waaronder het weergegeven bericht en de bijbehorende beschrijving over het oplossen van het probleem.

Statuscode Status type Message Description
SCHEMA_DOES_NOT_EXIST ERROR Het schema {} bestaat niet Het opgegeven schema bestaat niet. Het kan zijn verwijderd terwijl Fabric relevante tabelgegevens aan het ophalen was. Probeer het opnieuw.
TABLE_DOES_NOT_EXIST ERROR In het schema {}bestaat de tabel {} niet. De gegeven tabel bestaat niet. Het zou verwijderd kunnen zijn terwijl Fabric relevante tabelgegevens ophaalde. Probeer het opnieuw.
FORBIDDEN_CHARS_IN_COLUMN_NAME ERROR Tabel {}.{} bevat verboden tekens in de naam van kolommen {} De opgegeven kolom heeft een niet-ondersteund teken in de naam. 1
UNSUPPORTED_DATA_TYPE ERROR Tabel {}.{} heeft een niet ondersteund gegevenstype in kolom {} Een (of meer) kolommen van een tabel bevatten momenteel niet-ondersteunde gegevenstypen. 3
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR Tabel {}.{} bevat verboden tekens in naam Tabelnaam bevat niet-ondersteunde tekens. 1
NOT_REGULAR_TABLE ERROR Tabel {}.{} is geen gewone tabel Het tabeltype wordt niet ondersteund voor spiegeling. 2
HAS_PRIMARY_KEY OK Tabel {}.{} heeft een primaire sleutel Tabel is een gewone tabel en heeft een geldige primaire sleutel die wordt gebruikt voor spiegeling.
HAS_UNIQUE_INDEX OK Tabel {}.{} heeft een geschikte unieke index Tabel heeft geen primaire sleutel, maar heeft een niet-nul unieke index die moet worden gebruikt voor spiegeling. Nullable unieke indexen veroorzaken een fout tijdens de replicatiefase en worden niet ondersteund.
NO_INDEX_FULL_IDENTITY WAARSCHUWING Tabel {}.{} heeft geen geschikte unieke index. Volledige identiteit gebruiken Tabel heeft geen primaire sleutel of een unieke index, dus REPLICA IDENTITY FULL is vereist voor het ondersteunen van spiegeling, wat prestatieproblemen en aanvullend WAL-gebruik kan veroorzaken.

1 Object-id's met een spatie (' ') worden niet ondersteund.

2 Dit tabeltype wordt niet ondersteund voor spiegeling. Momenteel worden weergaven, gerealiseerde weergaven, buitenlandse tabellen en gepartitioneerde tabellen niet ondersteund. TimescaleDB-hypertabellen worden ook niet ondersteund voor Fabric Mirroring.

3 Zie Beperkingen voor een lijst met niet-ondersteunde gegevenstypen. Alleen kolommen met de volgende typen worden ondersteund:

  • 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 (* niet als primaire sleutel)
  • 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 worden twee 'tijd met tijdzone'-waarden die exact hetzelfde moment overeenkomen, maar in verschillende tijdzones als verschillend beschouwd. Bijvoorbeeld: 06:24:00.59+05 en 05:24:00.59+04 corresponderen met dezelfde tijdsduur, maar Postgres behandelt ze anders.

Standaard ongelimiteerde numerieke kolommen in brondatabaseschema's (zonder gedefinieerde precisie en schaal) worden geconverteerd naar Decimal128(38, 0) voordat ze worden gerepliceerd naar OneLake-tabellen, in overeenstemming met de SQL-standaardconventie waarbij een niet-opgegeven schaal betekent dat er een gehele precisie wordt gehanteerd.

DDL-bewerkingen (Data Definition Language) die worden ondersteund in de brondatabase

  • Kolom hernoemen: een kolom met de nieuwe naam wordt toegevoegd aan de gespiegelde tabel in Fabric en zal gegevens bevatten voor nieuw ingevoegde rijen (voor bestaande rijen zal NULL zijn). De oude kolom wordt nog steeds onderhouden met waarden voor de bestaande rijen (voor nieuwe rijen is NULL).
  • Kolom toevoegen: toegevoegde kolom is zichtbaar in de gespiegelde tabel en bevat gegevens voor nieuw ingevoegde rijen (voor bestaande rijen zijn NULL).
  • Kolom verwijderen: verwijderde kolom blijft zichtbaar in de gespiegelde tabel en bevat gegevens voor bestaande rijen (voor nieuwe rijen is NULL).
  • Primaire sleutel wijzigen: de spiegelingssessie wordt regelmatig voortgezet.

Elke andere DDL-bewerking op brontabellen wordt momenteel niet ondersteund en kan replicatiefouten veroorzaken.

Wijzigingen in Fabriccapaciteit of -werkruimte

Oorzaak Resultaat Aanbevolen oplossing
Fabriccapaciteit gepauzeerd/verwijderd Spiegelingsstops 1. Capaciteit hervatten of toewijzen vanuit Azure Portal
2. Ga naar 'Fabric' gerepliceerd database-item. Selecteer replicatie stoppen in de werkbalk.
3. Start de replicatie door spiegeldatabase te selecteren voor het gespiegelde item in de Fabric-portal.
Infrastructuurcapaciteit hervat Spiegelen wordt niet hervat 1. Ga naar Fabric gespiegeld database-item. Selecteer replicatie stoppen in de werkbalk.
2. Start de replicatie door spiegeldatabase te selecteren voor het gespiegelde item in de Fabric-portal.
Werkruimte verwijderd Spiegeling stopt automatisch Als spiegeling nog steeds actief is op de flexibele Server van Azure Database for PostgreSQL, maakt u verbinding met een serverbeheerder en voert u de volgende opdrachten uit op uw PostgreSQL-server: select azure_cdc.list_tracked_publications();, gebruikt u de geretourneerde publicatienaam en voert u de opdracht uit select azure_cdc.stop_publication(<publication_name>);
Capaciteit van de fabric-proefversie is verlopen Spiegeling stopt automatisch Bekijk de afloop van de fabric-proefcapaciteit.
De capaciteit van het fabric netwerk is overschreden Spiegelpauzes Wacht totdat de overbelastingsstatus voorbij is of werk de capaciteit bij. Meer informatie over acties die u kunt ondernemen om te herstellen uit overbelastingssituaties. Spiegeling wordt voortgezet zodra de capaciteit is hersteld.
Andere mogelijke bronfouten Spiegelen is uitgeschakeld Om ervoor te zorgen dat uw rekenresources niet worden beïnvloed en om de impact op de flexibele Azure Database voor PostgreSQL-server te minimaliseren, wordt spiegeling uitgeschakeld bij aanhoudende resourcefouten.
De instelling 'Gebruikers kunnen toegang krijgen tot gegevens die zijn opgeslagen in OneLake met apps buiten Fabric' is uitgeschakeld. "Replicator - Tabellen kunnen de replicatiestatus niet bereiken" Schakel de tenantinstelling in Gebruikers hebben toegang tot gegevens die zijn opgeslagen in OneLake met apps buiten Fabric.

SQL-query's voor probleemoplossing

Als u problemen ondervindt met spiegelen, maakt u verbinding met de bron-Azure Database for PostgreSQL-server en voert u deze controles uit met behulp van systeemweergaven en -functies om de configuratie te valideren.

  1. Voer de volgende query uit om te controleren of aan alle vereisten wordt voldaan voordat je CDC-spiegeling start. Met deze functie worden verschillende systeem- en configuratievereisten gecontroleerd om ervoor te zorgen dat de server gereed is voor CDC-bewerkingen.
-- 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"}]

Retourneert:(status text, data jsonb)

  • status: Algemene status : OK als alle controles zijn geslaagd, ERROR als er een controle mislukt
  • data: JSONB-matrix met gedetailleerde statusvermeldingen met status, status_codeen optioneel details

Statuscodes:

Statuscode Level Description
IDENTITY_NOT_CONFIGURED ERROR Service-principalreferenties zijn niet geconfigureerd (azure.service_principal_id of azure.service_principal_tenant_id GUC's zijn niet ingesteld)
CDC_ADMIN_ROLE_NOT_EXISTS ERROR De rol azure_cdc_admin bestaat niet in de database
USER_NOT_CDC_ADMIN (Gebruiker is geen CDC-beheerder) ERROR Huidige gebruiker heeft niet de rol azure_cdc_admin
GEEN_AANMAAKPRIVILEGES_OP_DATABASE ERROR Huidige gebruiker heeft geen CREATE-bevoegdheid voor de database
PUBLICATIELIMIET BEREIKT ERROR Maximum aantal publicaties (1) is bereikt voor de database
SERVER_IN_RECOVERY ERROR Server is een standby-replica in de herstelmodus (CDC-spiegeling wordt niet ondersteund op standbys)
MAX_WORKER_PROCESSES_TOO_LOW ERROR max_worker_processes ligt onder de aanbevolen drempelwaarde (13)
  1. Voer de volgende query uit om te controleren of tabellen in uw brondatabase in aanmerking komen voor replicatie. Hiermee worden systeemschema's (pg_catalog, information_schema, , pg_toast) en tabellen in eigendom van extensies uitgesloten.
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"}]

Retourneert: Set van (table_schema text, table_name text, mirroring_status text, mirroring_data jsonb)

  • table_schema: Schemanaam van de tabel
  • table_name: Naam van de tabel
  • mirroring_status: Algemene status - OK, WARNING, of ERROR
  • mirroring_data: JSONB-matrix met gedetailleerde statusvermeldingen met status, status_codeen optioneel details

Statuscodes:

Statuscode Level Description
SCHEMA_DOES_NOT_EXIST ERROR Het opgegeven schema bestaat niet
TABEL_BESTAAT_NIET ERROR De opgegeven tabel bestaat niet in het schema
VERBODEN_TE_KARAKTERS_IN_KOLOMNAAM ERROR Kolomnamen bevatten verboden tekens (bijvoorbeeld spaties)
FORBIDDEN_CHARS_IN_TABLE_NAME ERROR Tabelnaam bevat verboden tekens
UNSUPPORTED_DATA_TYPE WAARSCHUWING Tabel bevat kolommen met niet-ondersteunde gegevenstypen
UNSUPPORTED_TYPE_IN_REPLICA_IDENTITY (Niet ondersteund type in replica-identiteit) ERROR Niet-ondersteund gegevenstype in replicaidentiteitskolommen (wanneer er geen unieke index bestaat)
NOT_REGULAR_TABLE ERROR Tabel is geen gewone, permanente tabel (bijvoorbeeld weergave, tijdelijk, partitie)
NOT_TABLE_OWNER ERROR Huidige gebruiker is niet de eigenaar van de tabel
HAS_PRIMARY_KEY OK Tabel heeft een primaire sleutel
HAS_UNIQUE_INDEX OK Tabel heeft een geschikte unieke index
NO_INDEX_FULL_IDENTITY WAARSCHUWING Geen geschikte unieke index; volledige rij-identiteit wordt gebruikt (kan van invloed zijn op de prestaties)
  1. Voer de volgende query uit om fouten en problemen te retourneren die zijn gedetecteerd tijdens replicatiebewerkingen, inclusief systeemfouten, publicatiespecifieke fouten en fouten per tabel.
-- 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');

Parameters:

  • db_name (tekst): Databasenaam
  • pub_name (tekst): Publicatienaam

Gedrag:

  • Wanneer aangeroepen met lege tekenreeksen voor beide parameters (azure_cdc.get_health_status('', '')): retourneert alleen systeembrede fouten (fouttype 'S').
  • Wanneer deze wordt aangeroepen met geldige database- en publicatienamen: retourneert zowel systeembrede fouten als publicatie-/tabelspecifieke fouten voor de opgegeven publicatie.

Retourneert: Set van (error_time timestamptz, schema_name text, table_name text, error_type char(1), error_code text, params jsonb)

Fouttypen:

Fouttype Description
S Systeembrede fout
P Publicatiespecifieke fout
T Tabelspecifieke fout

Foutcodes:

Foutcode Typologie Description
CDC_ERR_SYS_MAX_NUMBER_OF_WORKERS_REACHED S Maximum aantal werknemers bereikt
CDC_FOUT_SYS_MAXIMUM_AANTAL_PUBLICATIES_BEREIKT S Maximum aantal publicaties voor de database bereikt
CDC_ERR_SYS_ONELAKE_PERMISSION_DENIED S Machtiging geweigerd voor OneLake-actie
CDC_ERR_SYS_ONELAKE_ARTIFACT_DOES_NOT_EXIST S OneLake-artefact is niet gevonden
CDC_ERR_SYS_ONELAKE_COMM_FAILED S OneLake-communicatie is mislukt
CDC_ERR_SYS_ONELAKE_BAD_REQUEST S Verkeerd verzoek naar OneLake
CDC_ERR_PUB_SNAPSHOT_TIMEOUT P Momentopname niet gereed na time-out
CDC_ERR_PUB_SNAPSHOT_WORKER_TIMEOUT P Time-out voor momentopname van een worker voor een specifieke tabel
CDC_ERR_PUB_ONELAKE_TOEGANG_GEWEIGERD P Machtiging geweigerd voor OneLake-actie
CDC_ERR_PUB_ONELAKE_ARTIFACT_DOES_NOT_EXIST P OneLake-artefact is niet gevonden
CDC_ERR_PUB_ONELAKE_COMM_FAILED P De communicatie met OneLake is gefaald
CDC_ERR_PUB_MAX_NUMBER_OF_WORKERS_REACHED P Maximaal aantal werknemers bereikt voor de publicatie
CDC_ERR_PUB_ONELAKE_BAD_REQUEST P Foute aanvraag naar OneLake
CDC_ERR_PUB_TOO_MANY_ERRORS P Te veel fouten tijdens de publicatieverwerking
CDC_ERR_TABLE_TRUNCATE_NOT_SUPPORTED T Afkappen wordt niet ondersteund (kan leiden tot inconsistentie van gegevens)
  1. Voer de volgende query uit om te controleren of de publicatie juist is gemaakt en of de replicatie juist verloopt.

    select * from azure_cdc.tracked_publications;
    

    Controleer of de publicatie actief is en er een momentopname is gegenereerd. U kunt ook controleren of volgende wijzigingsbatches zijn gegenereerd door query's uit te voeren:

    select * from azure_cdc.tracked_batches;
    
  2. Als in de azure_cdc.tracked_publications weergave geen voortgang wordt weergegeven bij het verwerken van incrementele wijzigingen, voert u de volgende SQL-query uit om te controleren of er problemen zijn gerapporteerd:

    SELECT * FROM pg_stat_activity WHERE state = 'idle in transaction';
    
  3. Als er geen problemen zijn gerapporteerd, voert u de volgende opdracht uit om de huidige configuratie van de gespiegelde PostgreSQL-database te controleren. Controleer of deze juist is ingeschakeld.

    SELECT * FROM pg_replication_slots;
    

    De belangrijkste kolommen die u hier kunt zoeken, zijn de slot_name en active. Elke waarde naast t (true) geeft een potentieel probleem aan.

  4. Neem contact op met de ondersteuning als probleemoplossing is vereist.

Beheerde identiteit

De door het systeem toegewezen beheerde identiteit (SAMI) van de flexibele Azure Database for PostgreSQL-server moet zijn ingeschakeld en moet de primaire identiteit zijn. Zie De door het systeem toegewezen beheerde identiteit voor flexibele PostgreSQL-server voor meer informatie.

Als na het inschakelen de SAMI-instellingsstatus later is uitgeschakeld en opnieuw is ingeschakeld, mislukt het spiegelen van flexibele Azure Database for PostgreSQL-server naar Fabric OneLake.

Controleer of de SAMI is ingeschakeld met de volgende query: show azure.service_principal_id;

SAMI-machtigingen

Verwijder geen bijdragerrechten van Azure Database for PostgreSQL Flexible Server System Assigned Managed Identity (SAMI) van het gespiegelde database-item van Fabric.

Als u per ongeluk SAMI-machtigingen verwijdert, werkt het spiegelen van Azure Database for PostgreSQL - flexibele server niet zoals verwacht. Er kunnen geen nieuwe gegevens worden gespiegeld vanuit de brondatabase.

Als u SAMI-machtigingen voor de flexibele server van Azure Database for PostgreSQL verwijdert of deze niet correct zijn ingesteld, volgt u de volgende stappen.

  1. Voeg de flexibele server SAMI toe als gebruiker door de ... optie beletselteken op het gespiegelde database-item te selecteren.
  2. Selecteer de optie Machtigingen beheren .
  3. Voer de naam in van de flexibele Azure Database for PostgreSQL-server. Geef lees - en schrijfmachtigingen op.