排查复制作业问题

本页面介绍了如何解决与 Cloud Data Fusion 相关的问题 复制作业。

异常:无法创建暂存存储桶

如果违反了存储桶命名惯例,则复制作业 可能会失败,并在流水线日志中显示以下错误:

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

您可以选择提供暂存存储桶的名称。如果未提供, 复制作业通过向作业附加后缀来生成一个 名称。在某些情况下,您可以使用较短的作业名称来解决此问题。 如需了解详情,请参阅存储分区名称

MySQL CONVERT_TO_NULL 值未设置

如果您使用的是 MySQL Connector/J 的早期版本(如版本 5), 复制作业失败并显示以下错误:

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

不同版本的 MySQL Connector/J 之间接受的 zeroDateTimeBehavior 值不兼容。

如需解决此问题,请使用 MySQL Connector/J 8 或更高版本。

复制功能和 SQL Server Always On 数据库

Microsoft SQL Server 源可以从 不间断投放广告 只读副本。对于此设置,您必须传递运行时参数, source.connector.database.applicationIntent=ReadOnly添加至 复制作业。如果没有此运行时参数,则作业会失败,并显示以下错误:

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

要解决此问题,请将 使用 source.connector.database.applicationIntent=ReadOnly 作为运行时参数。 这会在内部将 snapshot.isolation.mode 设置为 snapshot

Dataproc 静态集群上出现复制错误

运行复制作业时, Dataproc 集群节点可能会发生故障,并显示 java.lang.NullPointerExceptionConnection 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"

此错误是由 Conscrypt SSL 提供程序引起的 配置为在安装在 Dataproc 上的 JDK 版本中使用。

要解决此问题,请使用 Java JDK 使用默认 SSL 提供程序,方法是 Conscrypt SSL 提供程序。要停用 Conscrypt SSL 提供程序,请将 后续集群属性 启动 Dataproc 集群时:

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

SQL Server 的复制功能不会复制已更改的表的所有列

从 SQL Server 中的表复制数据时,如果您的 复制源表有新添加的列,它不是 自动添加到变更数据捕获 (CDC) 表中。 您必须手动将其添加到底层 CDC 表中。

如需解决此问题,请按以下步骤操作:

  1. 停用 CDC 实例:

    EXEC sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @capture_instance = 'dbo_myTable'
    GO
    
  2. 再次启用 CDC 实例:

    EXEC sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'myTable',
    @role_name = NULL,
    @capture_instance = 'dbo_myTable'
    GO
    
  3. 创建新的复制作业。

如需了解详情,请参阅处理对源表的更改

角色和权限错误

访问权限控制会出现以下问题。

Cloud Data Fusion 服务账号权限问题

使用 Oracle 数据库运行复制作业时,检索 表列表可能会因以下错误而失败:

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

使用 Oracle 数据库运行复制作业时, Cloud Data Fusion 在后端使用 Datastream 服务。 如需获取使用 Datastream 服务所需的权限, 请让管理员授予您 Datastream 管理员 (roles/datastream.admin) Cloud Data Fusion 服务账号的 IAM 角色。

未获得查看变更数据捕获的权限

从 SQL Server 复制数据时,您可能会在 流水线日志:

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)

如果用户在来源连接属性中提供,就会出现此问题 无权查看更改数据捕获 (CDC) 副本表。这由 role_name 参数控制, 使用 sys.sp_cdc_enable_table 在表上启用 CDC。

如需详细了解如何授予查看 CDC 所需的权限,请参阅 在表上启用 CDCsys.sp_cdc_enable_table

用户定义的类型权限问题

如果复制作业使用的用户数据库用户没有对用户定义的类型 (UDT) 的权限,您可能会在流水线日志中看到以下错误:

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

在此错误消息中,oid 列可能是 UDT。

如需解决此问题,请在数据库中运行以下命令,向用户授予访问权限:

GRANT EXECUTE ON TYPE::UDT_NAME to YOUR_USER

SQL Server Agent 未运行

如果 SQL Server Agent 未运行,您可能会看到以下内容 错误:

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

要解决此问题,请启动 SQL Server Agent。如需了解详情,请根据您使用的操作系统参阅以下文档:

SQL Server Replication 流水线版本不是最新版本

如果 SQL Server Replication 流水线版本不是 最新,流水线日志中将显示以下错误:

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

如果较低版本的源插件与较新版本的 Delta 应用搭配使用,就会出现此错误。在这种情况下,新版 Delta 应用定义的新接口未实现。

如需解决此问题,请按以下步骤操作:

  1. 通过提交 HTTP GET 请求:

    GET v3/namespaces/NAMESPACE_ID/apps/REPLICATOR_NAME
    

    如需了解详情,请参阅查看复制作业详情

  2. 请检查插件和 复制作业。

  3. 提交 HTTP GET 请求以检索可用工件的列表:

    GET /v3/namespaces/NAMESPACE_ID/artifacts
    

    如需了解详情,请参阅列出可用制品

身份验证范围不足的静态 Dataproc 集群

如果您使用的是已创建的静态 Dataproc 集群 身份验证范围不足时,您可能会在 流水线日志:

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.

要解决此问题, 创建新的静态 Dataproc 集群 并在同一项目中为此集群启用 cloud-platform 范围。