Risolvere i problemi relativi ai job di replica

Questa pagina mostra come risolvere i problemi relativi ai job di replica di Cloud Data Fusion.

Eccezione: impossibile creare il bucket di staging

Quando la convenzione di denominazione dei bucket viene violata, il job di replica potrebbe non riuscire e nel log della pipeline viene visualizzato il seguente errore:

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

Facoltativamente, puoi fornire il nome del bucket di staging. Se non viene fornito, il job di replica ne genera uno aggiungendo un suffisso al nome del job. In alcuni casi, puoi utilizzare un nome del lavoro più breve per risolvere il problema. Per saperne di più, consulta Nomi dei bucket.

Il valore CONVERT_TO_NULL di MySQL non è nel set

Se utilizzi una versione precedente di MySQL Connector/J, ad esempio la versione 5, il job di replica non va a buon fine e viene visualizzato il seguente errore:

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

I valori accettati per zeroDateTimeBehavior sono incompatibili tra diverse versioni di MySQL Connector/J.

Per risolvere il problema, utilizza MySQL Connector/J versione 8 o successive.

Database di replica e SQL Server Always On

Un'origine Microsoft SQL Server può acquisire le modifiche da una replica di sola lettura Always On. Per questa configurazione, devi passare l'argomento runtime source.connector.database.applicationIntent=ReadOnly al job di replica. Senza questo argomento di runtime, il job non va a buon fine e viene visualizzato il seguente errore:

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

Per risolvere il problema, imposta source.connector.database.applicationIntent=ReadOnly come argomento di runtime. In questo modo, snapshot.isolation.mode viene impostato internamente su snapshot.

Errore di replica sul cluster statico Managed Service for Apache Spark

Quando esegui un job di replica, la connessione SSL dai nodi del cluster Managed Service per Apache Spark potrebbe non riuscire e restituire un errore 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"

Questo errore si verifica a causa del provider SSL Conscrypt configurato per l'utilizzo nella versione JDK installata in Managed Service for Apache Spark.

Per risolvere il problema, utilizza il provider SSL predefinito per Java JDK disattivando il provider SSL Conscrypt. Per disattivare il provider SSL Conscrypt, imposta la proprietà del cluster seguente quando avvii il cluster Managed Service per Apache Spark:

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

La replica per SQL Server non replica tutte le colonne per le tabelle modificate

Quando replichi i dati da una tabella in SQL Server, se la tabella di origine della replica ha una colonna appena aggiunta, questa non viene aggiunta automaticamente alla tabella Change Data Capture (CDC). Devi aggiungerlo manualmente alla tabella CDC sottostante.

Per risolvere il problema, procedi nel seguente modo:

  1. Disattiva l'istanza CDC:

    EXEC sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @capture_instance = 'dbo_myTable'
    GO
    
  2. Abilita di nuovo l'istanza CDC:

    EXEC sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @role_name = NULL,
    @capture_instance = 'dbo_myTable'
    GO
    
  3. Crea un nuovo job di replica.

Per saperne di più, consulta Gestione delle modifiche alle tabelle di origine.

Errori relativi a ruoli e autorizzazioni

Si verificano i seguenti problemi con controllo dell'accesso.

Problema di autorizzazione del account di servizio Cloud Data Fusion

Quando esegui un job di replica utilizzando Oracle Database, il recupero di un elenco di tabelle potrebbe non riuscire e viene visualizzato il seguente errore:

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

Quando esegui un job di replica con un database Oracle, Cloud Data Fusion utilizza il servizio Datastream nel backend. Per ottenere le autorizzazioni necessarie per utilizzare il servizio Datastream, chiedi all'amministratore di concederti il ruolo IAM Amministratore Datastream (roles/datastream.admin) per il account di servizio Cloud Data Fusion.

Autorizzazione non concessa per visualizzare Change Data Capture

Quando replichi i dati da SQL Server, potresti visualizzare il seguente errore nel log della 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)

Questo problema si verifica se l'utente fornito nelle proprietà di connessione all'origine non dispone delle autorizzazioni per visualizzare Change Data Capture (CDC) per la tabella replicata. Questa operazione viene controllata dal parametro role_name quando si abilita CDC nella tabella, utilizzando sys.sp_cdc_enable_table.

Per saperne di più sulla concessione delle autorizzazioni richieste per visualizzare CDC, consulta Abilita CDC nella tabella e sys.sp_cdc_enable_table.

Problema di autorizzazione del tipo definito dall'utente

Se l'utente del database utilizzato dal job di replica non dispone delle autorizzazioni per il tipo definito dall'utente (UDT), potresti visualizzare il seguente errore nel log della pipeline:

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

In questo messaggio di errore, la colonna oid potrebbe essere un tipo definito dall'utente.

Per risolvere il problema, concedi l'accesso all'utente eseguendo questo comando nel database:

GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER

L'agente SQL Server non è in esecuzione

Se l'agente SQL Server non è in esecuzione, nel log della pipeline potrebbe essere visualizzato il seguente errore:

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

Per risolvere il problema, avvia l'agente SQL Server. Per saperne di più, consulta la seguente documentazione a seconda del sistema operativo che utilizzi:

La versione della pipeline di replica di SQL Server non è la più recente

Se la versione della pipeline di replica di SQL Server non è l'ultima, nel log della pipeline viene visualizzato il seguente errore:

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

Questo errore si verifica se una versione precedente del plug-in di origine funziona con una versione relativamente nuova dell'app delta. In questi casi, la nuova interfaccia definita dalla nuova versione dell'app delta non viene implementata.

Per risolvere il problema, procedi nel seguente modo:

  1. Recupera le informazioni sul job di replica inviando una richiesta GET HTTP:

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    Per saperne di più, consulta Visualizzare i dettagli del job di replica.

  2. Controlla le versioni del plug-in e dell'app delta utilizzate dal job di replica.

  3. Recupera l'elenco degli artefatti disponibili inviando una richiesta GET HTTP:

    GET /v3/namespaces/NAMESPACE_ID/artifacts
    

    Per ulteriori informazioni, vedi Elencare gli artefatti disponibili.

Cluster Managed Service for Apache Spark statico con ambito di autenticazione insufficiente

Se utilizzi un cluster Managed Service for Apache Spark statico creato con un ambito di autenticazione insufficiente, potresti visualizzare il seguente errore nel log della 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.

Per risolvere il problema, crea un nuovo cluster statico di Managed Service for Apache Spark e attiva l'ambito cloud-platform per questo cluster nello stesso progetto.