Résoudre les problèmes liés aux jobs 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 et afficher 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 tâche de réplication en génère une en ajoutant un suffixe au nom de la tâche. 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.

La valeur MySQL CONVERT_TO_NULL n'est pas définie

Si vous utilisez une version antérieure de MySQL Connector/J, telle que la version 5, la tâche 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 les différentes versions de MySQL Connector/J.

Pour résoudre ce problème, utilisez le connecteur MySQL/J version 8 ou ultérieure.

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

Une source Microsoft SQL Server peut capturer les modifications d'une instance répliquée en lecture seule toujours activée. 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 le cluster statique Dataproc

Lorsque vous exécutez une tâche de réplication, la connexion SSL à partir des nœuds de cluster Dataproc peut échouer avec une 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 du 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 le fournisseur SSL Conscrypt. Pour désactiver le fournisseur SSL Conscrypt, définissez 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 table source de réplication comporte une nouvelle colonne, celle-ci n'est pas automatiquement ajoutée à la table 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 lié au compte de service Cloud Data Fusion

Lors de l'exécution d'une tâche de réplication à l'aide de la base de données Oracle, la récupération d'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 attribuer le rôle IAM Administrateur Datastream (roles/datastream.admin) sur le compte de service Cloud Data Fusion.

Autorisation non accordée pour afficher la capture de 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 indiqué dans les propriétés de connexion source ne dispose pas des autorisations nécessaires pour afficher la capture de données modifiées (CDC, Change Data Capture) pour la table répliquée. Cela est contrôlé par le paramètre role_name lors de l'activation de 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 Activer la CDC sur la table et sys.sp_cdc_enable_table.

Problème d'autorisation "Type défini par l'utilisateur"

Si l'utilisateur de la base de données utilisé par le job de réplication ne dispose pas d'autorisations pour 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, il se peut que la colonne oid soit une 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, l'erreur suivante 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 en fonction du système d'exploitation que vous utilisez:

La version du pipeline de réplication SQL Server n'est pas la plus récente

Si la version du pipeline de réplication SQL Server n'est pas la plus récente, 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érez 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 d'un job de réplication.

  2. Vérifiez les versions du plug-in et de l'application Delta utilisées par la tâche 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 la section Répertorier 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éé avec un niveau d'authentification insuffisant, l'erreur suivante peut s'afficher dans le 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éez un cluster Dataproc statique et activez le champ d'application cloud-platform pour ce cluster dans le même projet.