Resolva problemas com tarefas de replicação

Esta página mostra-lhe como resolver problemas relacionados com tarefas de replicação do Cloud Data Fusion.

Exceção: não é possível criar o contentor de preparação

Quando a convenção de nomenclatura de contentores é violada, a tarefa de replicação pode falhar com o seguinte erro no registo do pipeline:

Caused by: java.io.IOException: Unable to create staging bucket
BUCKET_NAME in project PROJECT_NAME.

Opcionalmente, pode indicar o nome do contentor de preparação. Se não for fornecido, a tarefa de replicação gera um anexando um sufixo ao nome da tarefa. Em alguns casos, pode usar um nome do trabalho mais curto para resolver este problema. Para mais informações, consulte o artigo Nomes dos contentores.

O valor CONVERT_TO_NULL do MySQL não está no conjunto

Se estiver a usar uma versão anterior do MySQL Connector/J, como a versão 5, a tarefa de replicação falha com o seguinte erro:

The connection property 'zeroDateTimeBehavior' only accepts values of the form:
'exception', 'round' or 'convertToNull'. The value 'CONVERT_TO_NULL' is not in
this set.

Os valores aceites para zeroDateTimeBehavior são incompatíveis entre as diferentes versões do MySQL Connector/J.

Para resolver este problema, use o MySQL Connector/J versão 8 ou posterior.

Replicação e bases de dados Always On do SQL Server

Uma origem do Microsoft SQL Server pode captar alterações de uma réplica só de leitura do Always On. Para esta configuração, tem de transmitir o argumento de tempo de execução source.connector.database.applicationIntent=ReadOnly para a tarefa de replicação. Sem este argumento de tempo de execução, a tarefa falha com o seguinte erro:

Producer failure
java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException:
Failed to update database "DATABASE_NAME" because the database is read-only.

Para resolver este problema, defina source.connector.database.applicationIntent=ReadOnly como um argumento de tempo de execução. Isto define internamente snapshot.isolation.mode como snapshot.

Erro de replicação no cluster estático do Dataproc

Quando executa uma tarefa de replicação, a ligação SSL dos nós do cluster do Dataproc pode falhar com um erro 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"

Este erro ocorre devido ao fornecedor de SSL do Conscrypt configurado para utilização na versão do JDK instalada no Dataproc.

Para resolver este problema, use o fornecedor de SSL predefinido para o Java JDK desativando o fornecedor de SSL Conscrypt. Para desativar o fornecedor de SSL Conscrypt, defina a propriedade do cluster seguinte quando iniciar o cluster do Dataproc:

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

A replicação para o SQL Server não replica todas as colunas das tabelas alteradas

Quando replica dados de uma tabela no SQL Server, se a tabela de origem da replicação tiver uma coluna adicionada recentemente, esta não é adicionada automaticamente à tabela de captura de dados de alterações (CDC). Tem de a adicionar manualmente à tabela de CDC subjacente.

Para resolver este problema, siga estes passos:

  1. Desative a instância de CDC:

    EXEC sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @capture_instance = 'dbo_myTable'
    GO
    
  2. Ative novamente a instância de CDC:

    EXEC sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @role_name = NULL,
    @capture_instance = 'dbo_myTable'
    GO
    
  3. Crie uma nova tarefa de replicação.

Para mais informações, consulte o artigo Processar alterações às tabelas de origem.

Erros de funções e autorizações

Ocorrem os seguintes problemas com o controlo de acesso.

Problema de autorização da conta de serviço do Cloud Data Fusion

Quando executa uma tarefa de replicação com a base de dados Oracle, a obtenção de uma lista de tabelas pode falhar com o seguinte erro:

Error io.grpc.StatusRuntimeException: PERMISSION_DENIED: Permission
'datastream.streams.get' denied on 'projects/PROJECT_NAME/locations/REGION/streams/STREAM_NAME'

Quando executa uma tarefa de replicação com uma base de dados Oracle, o Cloud Data Fusion usa o serviço Datastream no back-end. Para receber as autorizações necessárias para usar o serviço Datastream, peça ao seu administrador para lhe conceder a função do IAM Datastream Admin (roles/datastream.admin) na conta de serviço do Cloud Data Fusion.

Autorização não concedida para ver a captura de dados de alterações

Quando replica dados do SQL Server, pode ver o seguinte erro no registo do 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)

Este problema ocorre se o utilizador fornecido nas propriedades da ligação de origem não tiver autorizações para ver a captura de dados de alterações (CDC) para a tabela replicada. Isto é controlado pelo parâmetro role_name quando ativa a CDC na tabela, usando sys.sp_cdc_enable_table.

Para mais informações sobre a concessão das autorizações necessárias para ver o CDC, consulte os artigos Ativar o CDC na tabela e sys.sp_cdc_enable_table.

Problema de autorização do tipo definido pelo utilizador

Se o utilizador da base de dados usado pela tarefa de replicação não tiver autorizações no tipo definido pelo utilizador (UDT), pode ver o seguinte erro no registo do pipeline:

java.lang.IllegalArgumentException: The primary key cannot reference a non-existent
column'oid' in table TABLE_NAME

Nesta mensagem de erro, a coluna oid pode ser um UDT.

Para resolver este problema, conceda acesso ao utilizador executando o seguinte comando na base de dados:

GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER

O agente do SQL Server não está em execução

Se o SQL Server Agent não estiver em execução, pode ver o seguinte erro no registo do pipeline:

No maximum LSN recorded in the database; please ensure that the SQL Server Agent
is running [io.debezium.connector.sqlserver.SqlServerStreamingChangeEventSource]

Para resolver este problema, inicie o SQL Server Agent. Para mais informações, consulte a seguinte documentação, consoante o sistema operativo que estiver a usar:

A versão do pipeline de replicação do SQL Server não é a mais recente

Se a versão do pipeline de replicação do SQL Server não for a mais recente, é apresentado o seguinte erro no registo do pipeline:

Method io/cdap/delta/sqlserver/SqlServerDeltaSource.configure(Lio/cdap/delta/api/SourceConfigurer;) is abstract

Este erro ocorre se uma versão anterior do plug-in de origem estiver a funcionar com uma versão relativamente nova da app delta. Nestes casos, a nova interface definida pela nova versão da app delta não é implementada.

Para resolver este problema, siga estes passos:

  1. Obtenha informações sobre a tarefa de replicação enviando um pedido HTTP GET:

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    Para mais informações, consulte o artigo Veja os detalhes da tarefa de replicação.

  2. Verifique as versões do plug-in e da app delta usadas pela tarefa de replicação.

  3. Envie um pedido HTTP GET para obter a lista de artefactos disponíveis:

    GET /v3/namespaces/NAMESPACE_ID/artifacts
    

    Para mais informações, consulte o artigo Liste os artefactos disponíveis.

Cluster do Dataproc estático com âmbito de autenticação insuficiente

Se estiver a usar um cluster do Dataproc estático criado com um âmbito de autenticação insuficiente, pode ver o seguinte erro no registo do 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.

Para resolver este problema, crie um novo cluster estático do Dataproc e ative o âmbito cloud-platform para este cluster no mesmo projeto.