En esta página se explica cómo resolver problemas relacionados con los trabajos de replicación de Cloud Data Fusion.
Excepción: no se ha podido crear el segmento de almacenamiento provisional
Si no se cumple la convención de nomenclatura de los segmentos, es posible que el trabajo de replicación falle y se muestre el siguiente error en el registro de la canalización:
Caused by: java.io.IOException: Unable to create staging bucket
BUCKET_NAME in project PROJECT_NAME.
También puedes indicar el nombre del segmento de almacenamiento provisional. Si no se proporciona, el trabajo de replicación genera uno añadiendo un sufijo al nombre del trabajo. En algunos casos, puedes usar un nombre de trabajo más corto para solucionar este problema. Para obtener más información, consulta el artículo Nombres de los segmentos.
Valor de MySQL CONVERT_TO_NULL
no incluido en el conjunto
Si usas una versión anterior de MySQL Connector/J, como la versión 5, el trabajo de replicación falla y se muestra el siguiente error:
The connection property 'zeroDateTimeBehavior' only accepts values of the form:
'exception', 'round' or 'convertToNull'. The value 'CONVERT_TO_NULL' is not in
this set.
Los valores aceptados de zeroDateTimeBehavior
son incompatibles entre las diferentes versiones de MySQL Connector/J.
Para solucionar este problema, usa MySQL Connector/J versión 8 o posterior.
Replicación y bases de datos Always On de SQL Server
Una fuente de Microsoft SQL Server puede capturar cambios de una réplica de solo lectura Always On. Para esta configuración, debe transferir el argumento de tiempo de ejecución
source.connector.database.applicationIntent=ReadOnly
a la
tarea de replicación. Si no se incluye este argumento de tiempo de ejecución, la tarea falla y se produce el siguiente error:
Producer failure
java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:
Failed to update database "DATABASE_NAME" because the database is read-only.
Para solucionar este problema, define source.connector.database.applicationIntent=ReadOnly
como argumento de tiempo de ejecución.
De esta forma, se asigna el valor snapshot
a snapshot.isolation.mode
de forma interna.
Error de replicación en un clúster estático de Dataproc
Cuando ejecutas una tarea de replicación, es posible que la conexión SSL de los nodos del clúster de Dataproc falle y se produzca un error java.lang.NullPointerException
o 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"
Este error se produce debido al proveedor de SSL Conscrypt configurado para usarlo en la versión de JDK instalada en Dataproc.
Para solucionar este problema, usa el proveedor de SSL predeterminado de Java JDK inhabilitando el proveedor de SSL Conscrypt. Para inhabilitar el proveedor SSL de Conscrypt, define la siguiente propiedad de clúster al iniciar el clúster de Dataproc:
--properties dataproc:dataproc.conscrypt.provider.enable=false
La replicación de SQL Server no replica todas las columnas de las tablas modificadas
Cuando replicas datos de una tabla de SQL Server, si la tabla de origen de la replicación tiene una columna recién añadida, no se añade automáticamente a la tabla de captura de datos de cambios (CDC). Debe añadirlo manualmente a la tabla de CDC subyacente.
Para solucionar este problema, sigue estos pasos:
Inhabilita la instancia de CDC:
EXEC sp_cdc_disable_table @source_schema = N'dbo', @source_name = N'myTable', @capture_instance = 'dbo_myTable' GO
Vuelve a habilitar la instancia de CDC:
EXEC sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'myTable', @role_name = NULL, @capture_instance = 'dbo_myTable' GO
Crea una tarea de replicación.
Para obtener más información, consulta Gestionar los cambios en las tablas de origen.
Errores de roles y permisos
Se producen los siguientes problemas con el control de acceso.
Problema con los permisos de la cuenta de servicio de Cloud Data Fusion
Al ejecutar un trabajo de replicación con Oracle Database, es posible que no se pueda obtener una lista de tablas y se muestre el siguiente error:
Error io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission
'datastream.streams.get' denied on 'projects/PROJECT_NAME/locations/REGION/streams/STREAM_NAME'
Cuando ejecutas una tarea de replicación con una base de datos de Oracle, Cloud Data Fusion usa el servicio Datastream en el backend.
Para obtener los permisos que necesitas para usar el servicio Datastream, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de Datastream (roles/datastream.admin
) en la cuenta de servicio de Cloud Data Fusion.
No se ha concedido permiso para ver la captura de datos de cambios
Al replicar datos de SQL Server, es posible que veas el siguiente error en el registro de la canalización:
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)
Este problema se produce si el usuario proporcionado en las propiedades de la conexión de origen no tiene permisos para ver la captura de datos de cambios (CDC) de la tabla replicada. Esto se controla mediante el parámetro role_name
al habilitar CDC en la tabla, mediante sys.sp_cdc_enable_table
.
Para obtener más información sobre cómo conceder los permisos necesarios para ver los cambios de datos, consulta Habilitar CDC en una tabla y sys.sp_cdc_enable_table.
Problema de permisos de tipo definido por el usuario
Si el usuario de la base de datos que usa el trabajo de replicación no tiene permisos en el tipo definido por el usuario (UDT), es posible que veas el siguiente error en el registro de la canalización:
java.lang.IllegalArgumentException: The primary key cannot reference a non-existent
column'oid' in table TABLE_NAME
En este mensaje de error, la columna oid
puede ser un UDT.
Para solucionar este problema, concede acceso al usuario ejecutando el siguiente comando en la base de datos:
GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER
El agente de SQL Server no se está ejecutando
Si el agente de SQL Server no se está ejecutando, es posible que aparezca el siguiente error en el registro de la canalización:
No maximum LSN recorded in the database; please ensure that the SQL Server Agent
is running [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]
Para solucionar este problema, inicia el Agente SQL Server. Para obtener más información, consulta la siguiente documentación en función del sistema operativo que utilices:
- Windows: inicia SQL Server Browser o una instancia de SQL Server Agent
- Linux: Habilitar el agente de SQL Server
La versión de la canalización de replicación de SQL Server no es la más reciente
Si la versión de la canalización de replicación de SQL Server no es la más reciente, aparecerá el siguiente error en el registro de la canalización:
Method io/cdap/delta/sqlserver/SqlServerDeltaSource.configure(Lio/cdap/delta/api/SourceConfigurer;) is abstract
Este error se produce si una versión anterior del complemento de origen funciona con una versión relativamente nueva de la aplicación delta. En estos casos, no se implementa la nueva interfaz definida por la nueva versión de la aplicación delta.
Para solucionar este problema, sigue estos pasos:
Para obtener información sobre el trabajo de replicación, envía una solicitud HTTP GET:
GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
Para obtener más información, consulta Ver los detalles de un trabajo de replicación.
Comprueba las versiones del complemento y de la aplicación delta que usa el trabajo de replicación.
Para obtener la lista de artefactos disponibles, envía una solicitud HTTP GET:
GET /v3/namespaces/NAMESPACE_ID/artifacts
Para obtener más información, consulta List Available Artifacts (Listar artefactos disponibles).
Clúster de Dataproc estático con un ámbito de autenticación insuficiente
Si usas un clúster de Dataproc estático que se ha creado con un ámbito de autenticación insuficiente, es posible que veas el siguiente error en el registro de la canalización:
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.
Para solucionar este problema, cree un clúster de Dataproc estático y habilite el ámbito cloud-platform
en el mismo proyecto.