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 d'attribution de noms des buckets n'est pas respectée, la tâche 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 fournir le nom du bucket de préproduction. Si aucun suffixe 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 tâche plus court pour résoudre ce problème. Pour en savoir plus, consultez la section Noms de bucket.

Valeur CONVERT_TO_NULL MySQL non 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 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 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 snapshot.isolation.mode en interne sur snapshot.

Erreur de réplication sur un cluster Dataproc statique

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 JDK installée sur Dataproc.

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 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 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 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 une tâche 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 une tâche de réplication à l'aide d'Oracle Database, la récupération d'une liste de tables peut échouer avec 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 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 indiqué dans les propriétés de connexion source n'est pas autorisé à afficher la capture des données modifiées (CDC) pour la table répliquée. Ce paramètre est contrôlé par le paramètre role_name lorsque vous activez 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, 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 dernière

Si la version du pipeline de réplication SQL Server n'est pas la dernière, 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 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 jobs 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 Lister les artefacts disponibles.

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

Si vous utilisez un cluster Dataproc statique créé avec une portée d'authentification insuffisante, 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 la portée cloud-platform pour ce cluster dans le même projet.