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 :
Désactivez l'instance CDC :
EXEC sp_cdc_disable_table @source_schema = N'dbo', @source_name = N'myTable', @capture_instance = 'dbo_myTable' GO
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
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:
- Windows: Démarrer le navigateur SQL Server ou une instance de l'agent SQL Server
- Linux : Activer l'agent SQL Server
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 :
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.
Vérifiez les versions du plug-in et de l'application Delta utilisées par la du job de réplication.
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.