Résoudre les problèmes liés aux tâches de réplication

Cette page explique comment résoudre les problèmes liés aux tâches de réplication Cloud Data Fusion.

Exception: Impossible de créer le bucket de préproduction

Lorsque la convention de dénomination des buckets n'est pas respectée, le job de réplication peut échouer avec l'erreur suivante dans le journal du pipeline:

Caused by: java.io.IOException: Unable to create staging bucket
BUCKET_NAME in project PROJECT_NAME.

Vous pouvez éventuellement indiquer le nom du bucket de préproduction. S'il n'est pas fourni, la valeur le job de réplication en génère un en y ajoutant un suffixe son nom. Dans certains cas, vous pouvez utiliser un nom de job plus court pour résoudre ce problème. Pour en savoir plus, consultez la section Noms de buckets.

Valeur CONVERT_TO_NULL MySQL non définie

Si vous utilisez une version antérieure de MySQL Connector/J, telle que la version 5, le job de réplication échoue avec l'erreur suivante:

The connection property 'zeroDateTimeBehavior' only accepts values of the form:
'exception', 'round' or 'convertToNull'. The value 'CONVERT_TO_NULL' is not in
this set.

Les valeurs acceptées pour zeroDateTimeBehavior sont incompatibles entre différentes versions de MySQL Connector/J.

Pour résoudre ce problème, utilisez la version 8 ou ultérieure de MySQL Connector/J.

Réplication et bases de données Always On SQL Server

Une source Microsoft SQL Server peut capturer les modifications un mode Toujours activé une instance répliquée en lecture seule. Pour cette configuration, vous devez transmettre l'argument d'exécution source.connector.database.applicationIntent=ReadOnly à la tâche de réplication. Sans cet argument d'exécution, la tâche échoue avec l'erreur suivante :

Producer failure
java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:
Failed to update database "DATABASE_NAME" because the database is read-only.

Pour résoudre ce problème, définissez source.connector.database.applicationIntent=ReadOnly en tant qu'argument d'exécution. Cela définit snapshot.isolation.mode en interne sur snapshot.

Erreur de réplication sur un cluster Dataproc statique

Lorsque vous exécutez un job de réplication, Les nœuds de cluster Dataproc peuvent échouer avec Erreur java.lang.NullPointerException ou Connection reset:

ERROR [SparkRunnerphase-1:i.c.c.i.a.r.ProgramControllerServiceAdapter@93] -
Spark program 'phase-1' failed with error: The driver could not establish a
secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
Error: "Connection reset ClientConnectionId:ID"

Cette erreur se produit en raison du fournisseur SSL Conscrypt configuré pour être utilisé dans la version JDK installée sur Dataproc.

Pour résoudre ce problème, utilisez le fournisseur SSL par défaut pour le JDK Java en désactivant au fournisseur SSL Conscrypt. Pour désactiver le fournisseur SSL Conscrypt, définissez le paramètre la propriété de cluster suivante lors du démarrage du cluster Dataproc:

--properties dataproc:dataproc.conscrypt.provider.enable=false

La réplication pour SQL Server ne réplique pas toutes les colonnes pour les tables modifiées

Lorsque vous répliquez les données d'une table dans SQL Server, si votre La table source de la réplication contient une colonne récemment ajoutée, qui n'est pas automatiquement ajoutée au tableau de capture de données modifiées (CDC, Change Data Capture). Vous devez l'ajouter manuellement à la table CDC sous-jacente.

Pour résoudre ce problème, procédez comme suit :

  1. Désactivez l'instance CDC :

    EXEC sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @capture_instance = 'dbo_myTable'
    GO
    
  2. Réactivez l'instance CDC:

    EXEC sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @role_name = NULL,
    @capture_instance = 'dbo_myTable'
    GO
    
  3. Créez un job de réplication.

Pour en savoir plus, consultez la section Gérer les modifications des tables sources.

Erreurs liées aux rôles et aux autorisations

Les problèmes suivants se produisent avec le contrôle des accès.

Problème d'autorisation du compte de service Cloud Data Fusion

Lors de l'exécution d'un job de réplication à l'aide de la base de données Oracle, la récupération une liste de tables peut échouer et renvoyer l'erreur suivante:

Error io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission
'datastream.streams.get' denied on 'projects/PROJECT_NAME/locations/REGION/streams/STREAM_NAME'

Lorsque vous exécutez une tâche de réplication avec une base de données Oracle, Cloud Data Fusion utilise le service Datastream dans le backend. Pour obtenir les autorisations nécessaires pour utiliser le service Datastream, demandez à votre administrateur de vous accorder le Administrateur Datastream (roles/datastream.admin) sur le compte de service Cloud Data Fusion.

Autorisation non accordée pour afficher la capture des données modifiées

Lorsque vous répliquez des données à partir de SQL Server, l'erreur suivante peut s'afficher dans le journal du pipeline:

No whitelisted table has enabled CDC, whitelisted table list does not contain any
table with CDC enabled or no table match the white/blacklist filter(s)

Ce problème survient si l'utilisateur a fourni les propriétés de la connexion source ne dispose pas des autorisations nécessaires pour afficher la capture de données modifiées (CDC, Change Data Capture) pour répliquée de table. Ce paramètre est contrôlé par le paramètre role_name lorsque activer la CDC sur la table à l'aide de sys.sp_cdc_enable_table.

Pour en savoir plus sur l'attribution des autorisations requises pour afficher la CDC, consultez les pages Activer la CDC sur une table et sys.sp_cdc_enable_table.

Problème d'autorisation de type défini par l'utilisateur

Si l'utilisateur de la base de données utilisé par la tâche de réplication ne dispose pas d'autorisations sur le type défini par l'utilisateur (UDT), l'erreur suivante peut s'afficher dans le journal du pipeline :

java.lang.IllegalArgumentException: The primary key cannot reference a non-existent
column'oid' in table TABLE_NAME

Dans ce message d'erreur, la colonne oid peut être un UDT.

Pour résoudre ce problème, accordez l'accès à l'utilisateur en exécutant la commande suivante dans la base de données :

GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER

L'agent SQL Server n'est pas en cours d'exécution

Si l'agent SQL Server n'est pas en cours d'exécution, le message suivant peut s'afficher : dans le journal du pipeline:

No maximum LSN recorded in the database; please ensure that the SQL Server Agent
is running [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]

Pour résoudre ce problème, démarrez l'agent SQL Server. Pour en savoir plus, consultez à la documentation suivante, selon le système d'exploitation que vous utilisez:

La version du pipeline de réplication SQL Server n'est pas la dernière

Si la version du pipeline de réplication SQL Server n'est pas dernièrement, l'erreur suivante apparaît dans le journal du pipeline:

Method io/cdap/delta/sqlserver/SqlServerDeltaSource.configure(Lio/cdap/delta/api/SourceConfigurer;) is abstract

Cette erreur se produit si une version antérieure du plug-in source fonctionne avec une version relativement récente de l'application delta. Dans ce cas, la nouvelle interface définie par la nouvelle version de l'application delta n'est pas implémentée.

Pour résoudre ce problème, procédez comme suit :

  1. Récupérer des informations sur la tâche de réplication en envoyant une requête HTTP GET :

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    Pour en savoir plus, consultez la section Afficher les détails des tâches de réplication.

  2. Vérifiez les versions du plug-in et de l'application Delta utilisées par la du job de réplication.

  3. Récupérez la liste des artefacts disponibles en envoyant une requête HTTP GET :

    GET /v3/namespaces/NAMESPACE_ID/artifacts
    

    Pour en savoir plus, consultez Lister les artefacts disponibles.

Cluster Dataproc statique avec un champ d'application d'authentification insuffisant

Si vous utilisez un cluster Dataproc statique qui a été créé si le niveau d'accès d'authentification est insuffisant, il est possible que l'erreur suivante s'affiche dans journal du pipeline:

ERROR [worker-DeltaWorker-0:i.c.c.i.a.r.ProgramControllerServiceAdapter@92] - Worker
Program 'DeltaWorker' failed.
Caused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had
insufficient authentication scopes.

Pour résoudre ce problème, Créer un cluster Dataproc statique et activez le niveau d'accès cloud-platform pour ce cluster dans le même projet.