Resolver problemas de jobs de replicação

Esta página mostra como resolver problemas relacionados a jobs de replicação do Cloud Data Fusion.

Exceção: não foi possível criar o bucket de preparação

Quando a convenção de nomenclatura do bucket é violada, o job de replicação pode falhar com o seguinte erro no registro do pipeline:

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

Você pode fornecer o nome do bucket de preparo. Se não for fornecido, o job de replicação vai gerar um, anexando um sufixo ao nome do job. Em alguns casos, é possível usar um nome de job mais curto para resolver esse problema. Para mais informações, consulte Nomes de bucket.

O valor CONVERT_TO_NULL do MySQL não está definido

Se você estiver usando uma versão anterior do MySQL Connector/J, como a 5, o job de replicação falhará 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 aceitos para zeroDateTimeBehavior são incompatíveis entre diferentes versões do MySQL Connector/J.

Para resolver esse problema, use o MySQL Connector/J versão 8 ou mais recente.

Replicação e bancos de dados sempre ativados do SQL Server

Uma fonte do Microsoft SQL Server pode capturar alterações de uma réplica somente leitura Sempre ativada. Para essa configuração, é necessário transmitir o argumento do ambiente de execução source.connector.database.applicationIntent=ReadOnly para o job de replicação. Sem esse argumento de ambiente de execução, o job 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 esse problema, defina source.connector.database.applicationIntent=ReadOnly como um argumento de tempo de execução. Isso define internamente snapshot.isolation.mode como snapshot.

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

Ao executar um job de replicação, a conexão SSL de nós de 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"

Esse erro ocorre devido ao provedor SSL do Conscrypt configurado para uso na versão do JDK instalada no Dataproc.

Para resolver esse problema, use o provedor SSL padrão do Java JDK desativando o provedor SSL do Conscrypt. Para desativar o provedor SSL do Conscrypt, defina a seguinte propriedade do cluster ao iniciar o cluster do Dataproc:

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

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

Quando você replica dados de uma tabela no SQL Server, se a tabela de origem da replicação tiver uma coluna recém-adicionada, ela não será adicionada automaticamente à tabela de captura de dados alterados (CDC). Você precisa adicioná-lo manualmente à tabela de CDC subjacente.

Para resolver o problema, siga estas etapas:

  1. Desative a instância do CDC:

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

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

Para mais informações, consulte Como processar alterações em tabelas de origem.

Erros de papéis e permissões

Os problemas a seguir ocorrem com o controle de acesso.

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

Ao executar um job de replicação usando o Oracle Database, a recuperaçã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 você executa um job de replicação com um banco de dados Oracle, o Cloud Data Fusion usa o serviço Datastream no back-end. Para receber as permissões necessárias para usar o serviço Datastream, peça ao administrador para conceder a você o papel do IAM de Administrador do Datastream (roles/datastream.admin) na conta de serviço do Cloud Data Fusion.

Não foi concedida permissão para acessar a captura de dados de mudanças

Ao replicar dados do SQL Server, talvez você veja o seguinte erro no registro 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)

Esse problema ocorre se o usuário informado nas propriedades de conexão de origem não tiver permissões para visualizar a captura de dados de mudança (CDC, na sigla em inglês) da tabela replicada. Isso é controlado pelo parâmetro role_name ao ativar a CDC na tabela usando sys.sp_cdc_enable_table.

Para mais informações sobre como conceder as permissões necessárias para visualizar a CDC, consulte Ativar a CDC na tabela e sys.sp_cdc_enable_table.

Problema de permissão de tipo definido pelo usuário

Se o usuário do banco de dados usado pelo job de replicação não tiver permissões no tipo definido pelo usuário (UDT, na sigla em inglês), talvez você veja o seguinte erro no registro 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 esse problema, conceda acesso ao usuário executando o seguinte comando no banco de dados:

GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER

O SQL Server Agent não está em execução

Se o agente do SQL Server não estiver em execução, você poderá encontrar o seguinte erro no registro 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 esse problema, inicie o agente do SQL Server. Para mais informações, consulte a documentação abaixo, dependendo do sistema operacional que você está usando:

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, o seguinte erro vai aparecer no registro do pipeline:

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

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

Para resolver o problema, siga estas etapas:

  1. Para recuperar informações sobre o job de replicação, envie uma solicitação HTTP GET:

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    Para mais informações, consulte Conferir os detalhes do job de replicação.

  2. Verifique as versões do plug-in e do app delta usado pelo job de replicação.

  3. Extraia a lista de artefatos disponíveis enviando uma solicitação HTTP GET:

    GET /v3/namespaces/NAMESPACE_ID/artifacts
    

    Para mais informações, consulte Listar artefatos disponíveis.

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

Se você estiver usando um cluster estático do Dataproc criado com escopo de autenticação insuficiente, talvez veja o seguinte erro no registro 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 esse problema, crie um novo cluster estático do Dataproc e ative o escopo cloud-platform para esse cluster no mesmo projeto.