Résoudre les problèmes liés aux jobs de réplication

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

Exception : impossible de créer le bucket intermédiaire

Si la convention d'attribution de noms aux buckets n'est pas respectée, le job de réplication peut échouer et renvoyer 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 intermédiaire. Si aucun nom n'est fourni, la tâche de réplication en génère un 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 Noms de buckets.

La valeur CONVERT_TO_NULL de MySQL n'est pas définie

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

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 MySQL Connector/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 dupliqué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 la valeur snapshot.isolation.mode en interne sur snapshot.

Erreur de réplication sur le cluster statique Managed Service pour Apache Spark

Lorsque vous exécutez un job de réplication, la connexion SSL à partir des nœuds de cluster Managed Service pour Apache Spark 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 JDK installée sur Managed Service for Apache Spark.

Pour résoudre ce problème, utilisez le fournisseur SSL par défaut pour Java JDK en désactivant le fournisseur SSL Conscrypt. Pour désactiver le fournisseur SSL Conscrypt, définissez la propriété de cluster suivante lorsque vous démarrez le cluster Managed Service for Apache Spark :

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

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

Lorsque vous répliquez des données à partir d'une table dans SQL Server, si votre table source de réplication comporte une colonne nouvellement ajoutée, elle n'est pas automatiquement ajoutée à la table de capture des 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 de 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

Lorsque vous exécutez un job de réplication à l'aide d'Oracle Database, 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 un job de réplication avec une base de données Oracle, Cloud Data Fusion utilise le service Datastream en backend. Pour obtenir les autorisations nécessaires pour utiliser le service Datastream, demandez à votre administrateur de vous accorder 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 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 se produit si l'utilisateur fourni dans les propriétés de connexion à la source n'est pas autorisé à afficher la capture des données modifiées (CDC) pour la table répliquée. Cela est contrôlé par le paramètre role_name lorsque la CDC est activée 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 une table et sys.sp_cdc_enable_table.

Problème d'autorisation lié au 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 des 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, 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 s'affiche 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 le job de réplication en envoyant une requête HTTP GET :

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    Pour en savoir plus, consultez 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 le 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 Managed Service pour Apache Spark statique avec un champ d'authentification insuffisant

Si vous utilisez un cluster Managed Service for Apache Spark statique créé avec un champ d'application 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 Managed Service for Apache Spark statique et activez le champ d'application cloud-platform pour ce cluster dans le même projet.