Resolver problemas de jobs de replicação

Nesta página, mostramos como resolver problemas relacionados ao Cloud Data Fusion os jobs de replicação do Compute Engine.

Exceção: não é possível criar o bucket de preparo

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.

Também é possível fornecer o nome do bucket de preparo. Se não forem fornecidos, os o job de replicação gera um anexando um sufixo a ele nome. Em alguns casos, você pode usar um nome mais curto para resolver esse problema. Para mais informações, consulte Nomes de buckets.

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 versão 5, o job de replicação falha e mostra 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 posterior.

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

Uma fonte do Microsoft SQL Server pode capturar alterações um Sempre ativado réplica somente leitura. Para esta configuração, você precisa transmitir o argumento de tempo de execução source.connector.database.applicationIntent=ReadOnly para o de replicação do job. 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 ambiente de execução. Isso define internamente snapshot.isolation.mode como snapshot.

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

Quando você executa um job de replicação, a conexão SSL nós do cluster do Dataproc podem falhar 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 à solicitação do provedor SSL Conscrypt configuradas para uso na versão do JDK instalada no Dataproc.

Para resolver esse problema, use o provedor de SSL padrão para o Java JDK desativando provedor de SSL do Conscrypt. Para desativar o provedor de SSL do Conscrypt, defina o propriedade do cluster a seguir 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, A tabela de origem de replicação tem uma coluna recém-adicionada, adicionados automaticamente à tabela de captura de dados alterados (CDC). É preciso 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 com o Oracle Database, recuperar 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 do Datastream, peça ao administrador para conceder a você Administrador do Datastream (roles/datastream.admin) Papel do IAM na conta de serviço do Cloud Data Fusion.

Permissão não concedida para visualizar a captura de dados alterados

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 da conexão de origem não tem permissão para acessar a captura de dados alterados (CDC) da tabela replicada. Isso é controlado pelo parâmetro role_name quando ativar a CDC na tabela usando sys.sp_cdc_enable_table.

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

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

Se o usuário do banco de dados utilizado pelo job de replicação não tiver do tipo definido pelo usuário (UDT), 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 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 SQL Server Agent não estiver em execução, você verá o seguinte: 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 SQL Server Agent. Para mais informações, consulte a documentação a seguir, dependendo do sistema operacional que você estiver 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 mais recente, o seguinte erro aparecerá no registro do pipeline:

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

Esse erro ocorrerá se uma versão anterior do plug-in de origem for trabalhando com uma versão relativamente nova do app delta. Nesses casos, o novo interface definida pela nova versão do app delta não foi implementada

Para resolver o problema, siga estas etapas:

  1. Recupere informações sobre o job de replicação enviando um Solicitação GET HTTP:

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

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

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

  3. Recupere 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 que foi criado com escopo de autenticação insuficiente, talvez o seguinte erro apareça na 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, criar um novo cluster estático do Dataproc e ativar o escopo cloud-platform para este cluster no mesmo projeto.