概览
数据流在运行时可能会出错。
- 某些错误(例如源数据库上的密码错误)可以恢复,这意味着它们可以得到修复,并且数据流会自动恢复。
- 一些错误可能会影响单个对象,例如包含不受支持的数据类型的事件。其他错误可能会影响多个对象或整个数据流,例如当 Datastream 无法连接到源数据库时。
- 根据错误情况,Datastream 界面的数据流或数据流详情页面中提供了相关信息。您还可以使用 Datastream 的 API 来检索错误的相关信息。
如需排查错误,请导航到数据流以查看错误,然后按照错误消息中列出的步骤操作。
本页面包含有关配置、连接、Oracle 和 MySQL 错误的信息,以及排查错误的步骤。
配置和连接错误
错误 | 问题排查步骤 |
---|---|
未能连接到源数据库(常规)。 | 造成这种情况的原因有很多。如需排查此错误,请执行以下操作:
数据流会自动恢复。 |
未能连接到源数据库(IP 许可名单)。 | 如果所选连接方法为 IP 许可名单,但 Datastream 的一个或多个传出 IP 地址未正确添加到源数据库,则可能会发生此问题。请确保在网络防火墙上配置 Datastream 连接配置文件中显示的传出 IP 地址,以便源数据库服务器可以接受来自这些 IP 地址的连接。解决此问题后,数据流会自动恢复。 |
未能连接到源数据库(转发 SSH 隧道)。 | 如果转发 SSH 隧道存在问题,则可能会发生此问题。检查隧道的状态。如果隧道停止,则需要启动它。解决此问题后,数据流会自动恢复。 |
Datastream 无法通过转发 SSH 隧道连接到堡垒主机。 | 请验证来源连接配置文件中的转发 SSH 隧道是否配置正确,以及该端口在 SSH 隧道服务器中是否处于开启状态。 |
由于证书错误,无法连接到源数据库。 | 如果在定义来源连接配置文件时提供的证书存在问题,则可能会发生此错误。导航到连接配置文件页面,然后选择给定的连接配置文件。验证证书是否已正确设置。进行更改后,保存连接配置文件,随后数据流会自动恢复。 |
未能使用专用连接来连接到源数据库。 |
|
组织政策 constraints/datastream.disablePublicConnectivity 开启时,不允许使用连接类型 STATIC_SERVICE_IP_CONNECTIVITY。 | 您为要创建的连接配置文件选择了公共 IP 许可名单或转发 SSH 隧道网络连接方法。但是,Datastream 的禁止使用公共连接方法组织政策已启用。因此,您无法为连接配置文件选择公共连接方法。 如需解决此问题,请选择专用 VPC 对等互连网络连接方法或停用组织政策。 要停用组织政策,请执行以下操作:
|
为数据流配置源数据库时,我在要包含的对象列表中找不到要转移的表和架构。 | 如果您的数据库包含数千个表和架构,就可能会发生这种情况。在 Google Cloud 控制台中配置数据流来源时,部分来源可能未包含在要拉取的对象列表中。在选择要包含的对象部分中,选择自定义,而不是选择特定架构和表。在对象匹配条件字段中,输入您希望 Datastream 拉取的架构和表。 |
我使用要包含的对象菜单向数据流添加了多个表。不过,当我查看数据流详情中的对象标签页时,发现其中缺少一些表格。 | 确保其中每个表至少有一次 CDC 更新,以便 Datastream 可以识别更改并自动将这些表包含在流中。 |
使用 Google Cloud 控制台中的要包含的对象菜单时,无法加载对象列表。 | 如果您的数据库中有超过 5,000 个架构和表,就可能会发生这种情况。使用其他方法指定要包含的对象,或使用 Datastream API。如需了解详情,请参阅配置源数据库。 |
在流式传输期间丢弃的事件,未复制到目的地。 | Datastream 可能会在流式传输期间丢弃不受支持的事件。您可以执行以下操作来解决此问题:
|
Oracle 错误
错误 | 问题排查步骤 |
---|---|
补充日志记录在源数据库上配置有误。 | 如果源数据库上的补充日志记录配置不正确,则提取正在进行的变更数据捕获 (CDC) 数据时可能会出错。验证补充日志记录是否已正确配置。具体来说,确认正在从来源流式传输到目标位置的数据库表已启用补充日志记录功能。数据流会自动恢复。 |
由于日志位置丢失,无法恢复复制。 | 当复制过程长时间暂停时,可能会发生此错误,从而导致日志位置丢失。数据流暂停的时长不得接近日志保留期限。重新创建数据流。 |
日志文件缺失(部分或全部)。 | 日志文件可能已被删除。Oracle 会尽快完全清除日志文件,除非您指定了最短轮换周期来保留它们。在 Oracle 服务器中,设置日志文件的保留时间。例如,使用 对于 RDS 部署,请使用 |
排除列表中有包含列表。 | 包含列表完全包含在排除列表中,因此 Datastream 从来源拉取的对象列表为空。请修改所选对象,然后重试。 |
Oracle 数据库的日志记录模式未设置为 ARCHIVELOG。 | 请更改日志记录模式,然后重试。 |
Datastream 返回 ORA-00942: table or view does not exist 错误消息,但一切都已正确配置。 |
这可能是由于在 Oracle 服务器上缓存造成的。重新创建数据库用户应该可以解决缓存问题。 |
数据流已在运行后,对 Oracle 来源所做的更改不会反映在目标中。 | 由于 Datastream 从已归档的重做日志文件中读取,因此您对来源所做的更改在日志归档之前不会反映在目标位置。如需查看目标位置中的更改,请更改日志归档政策或手动强制切换日志。如需了解详情,请参阅使用 Oracle 数据库重做日志文件。 |
出现意外的内部错误。 | 如需了解详情,请与 Google 支持团队联系。 |
MySQL 错误
错误 | 问题排查步骤 |
---|---|
二进制日志在源数据库上配置错误。 | 对于连续的 MySQL 流,如果 binlog 的 源数据库的配置不正确。如需排查此错误,请执行以下操作:
|
由于二进制日志位置丢失,无法恢复复制。 | 当复制过程长时间暂停时,可能会发生此错误,从而导致二进制日志位置丢失。数据流暂停的时长不得接近二进制日志保留期限。重新创建数据流。 |
由于源数据库和目标版本不兼容,无法运行数据流。 | 如果源数据库与版本 支持矩阵。如需排查此错误,请执行以下操作:
|
AWS RDS MySQL 源二进制日志缺失(部分或全部)。 | 二进制日志可能已被删除。AWS RDS 会尽快完全清除日志文件,除非您指定了最短轮换周期来保留它们。在源 AWS RDS MySQL 实例中,设置二进制日志的保留时间(以小时为单位)。例如,使用 mysql.rds_set_configuration('binlog retention hours', 168); 将二进制日志保留至少 7 天。 |
排除列表中有包含列表。 | 包含列表完全包含在排除列表中,因此 Datastream 从来源拉取的对象列表为空。请修改所选对象,然后重试。 |
Datastream 无法复制 MySQL 数据库。 | 确保 Datastream 有权复制数据库。 |
为 MySQL 来源创建连接配置文件时,加密类型菜单中不接受多个 PEM 编码的 SSL 证书。 | Datastream 不支持 MySQL 连接配置文件中的 SSL 证书链。仅支持单个 x509 PEM 编码证书。 |
从 MySQL 来源进行流式传输时,延迟时间较长。 | 提高 Datastream 从源数据库读取数据的能力:
|
出现意外的内部错误。 | 如需了解详情,请与 Google 支持团队联系。 |
PostgreSQL 错误
错误 | 问题排查步骤 |
---|---|
逻辑解码在源数据库上配置有误。 | 验证逻辑解码是否配置正确。请参阅配置源 PostgreSQL 数据库。 |
复制槽不存在。 | 提取持续性数据时出错,如果数据库中不存在复制槽,则可能会发生变更数据捕获 (CDC) 数据。验证复制槽配置是否正确。请参阅配置源 PostgreSQL 数据库。 |
复制槽配置了错误的插件。 | 如果复制槽使用 pgoutput 以外的插件进行配置,可能会发生此错误。验证复制槽是否配置正确。如需了解详情,请参阅源 PostgreSQL 数据库。 |
复制槽位在其他进程中处于活动状态。 | 如果复制槽正在被其他进程使用,可能会发生此错误。复制槽一次只能由单个进程使用。请确保除了 Datastream 之外,您不会在任何其他进程中使用相同的复制槽。 |
发布内容未正确配置。 | 如果发布内容未配置为公开数据流配置中包含的表,则可能会出现此错误。验证发布内容是否配置正确。请参阅配置有关数据流的源数据库的信息。 |
出版物不存在。 | 如果数据库中不存在发布内容,就可能会出现此错误。验证发布内容是否配置正确。请参阅配置源 PostgreSQL 数据库。 |
由于 WAL 文件丢失,无法继续复制。 | 当复制过程长时间暂停时,可能会发生此错误,从而导致 WAL 文件丢失。数据流暂停的时长不得接近 WAL 文件保留期限。重新创建数据流。 |
排除列表中有包含列表。 | 包含列表完全包含在排除列表中,因此 Datastream 从来源拉取的对象列表为空。请修改所选对象,然后重试。 |
Datastream 无法复制 PostgreSQL 架构。 | 确保 Datastream 有权复制架构。 |
源数据库上的大型事务会导致数据复制和同步出现问题。 | 如果您在源数据库中插入、更新或删除大量记录,相应的事件可能会导致复制槽过载。Datastream 需要时间来读取和处理这些事件。由于 PostgreSQL 复制槽是单线程的,因此在 Datastream 赶上复制槽中的所有更改之前,系统会延迟处理复制槽中的其他更改,包括对其他表中数据的更改。 |
源数据库上的大型事务会导致 CDC 吞吐量较低。 | Datastream 不支持 PostgreSQL 中的多线程 CDC。为了克服此限制并提高 CDC 吞吐量,您可以将来源拆分为多个数据流,每个数据流都有自己的发布和复制槽。例如,您可以为数据库中最大的表创建一个数据流,为所有其他表创建另一个数据流,也可以为优先级最高的表创建一个数据流,为其余表创建另一个数据流。应用场景可能会有所不同,因此您需要考虑在特定 CDC 场景中哪种方式最为合理。如需了解如何创建发布内容,请参阅配置源 PostgreSQL 数据库。 |
不受支持的事件已丢弃,原因代码:BIGQUERY_TOO_MANY_PRIMARY_KEYS 。 |
如果表的 PostgreSQL 副本身份设置为 FULL ,则 Datastream 会将此表中的所有列视为主键。如果表中的列数超过 16 列,就违反了 BigQuery CDC 限制并导致了错误。如需解决此问题,请完成以下步骤:
|
出现意外的内部错误。 | 如需了解详情,请与 Google 支持团队联系。 |
SQL Server 错误
错误 | 问题排查步骤 |
---|---|
已为数据库 DATABASE_NAME 停用 CDC。 | 必须为数据库启用变更数据捕获 (CDC)。Datastream 需要对事务日志拥有直接读取权限,才能将实时更改复制到源数据库,并获取完整的日志信息。为数据库启用 CDC,然后重试。 如需了解如何为数据库启用 CDC,请参阅配置源 SQL Server 数据库。 |
已停用 CDC 的表。 | 必须为数据流中包含的所有表启用变更数据捕获 (CDC)。Datastream 需要拥有对事务日志的直接读取访问权限,才能复制对源表的实时更改,以及获取完整的日志信息。请为数据流中包含的表启用 CDC,然后重试。 如需了解如何为源表启用 CDC,请参阅配置源 SQL Server 数据库。 |
缺少权限。 | Datastream 缺少从来源读取数据的必要权限。请向用于连接数据库的用户账号授予适当的权限,然后重试。 |
不支持 SQL Server EDITION_NAME 版本。 | Datastream 不支持此 SQL Server 版本。如需详细了解受支持的 SQL Server 版本,请参阅 SQL Server 来源概览。 |
不支持标准版的 SQL Server 版本 VERSION_NAME。 | Datastream 不支持此版本的 SQL Server Standard 版本。如需详细了解支持的 SQL Server 版本,请参阅将 SQL Server 用作来源的概览。 |
SQL Server CDC 配置:失败。 | 您选择的 CDC 方法不符合您的数据库配置。请更改 CDC 方法,然后重试。 |
BigQuery 错误
错误 | 问题排查步骤 |
---|---|
BIGQUERY_UNSUPPORTED_PRIMARY_KEY_CHANGE, details: Failed to write to BigQuery due to an unsupported primary key change: adding primary keys to existing tables is not supported. |
如果来源中的主键发生更改,您必须在 BigQuery 中删除表并再次启动回填。这是 BigQuery 的一项限制,因为如果主键不同,则无法保证新事件与现有行正确合并。如需了解详情,请参阅配置 BigQuery 目标位置。 |
目标 BigQuery 表包含的记录远远多于源表。 | 当源表没有主键时,可能会发生这种情况。在这种情况下,Datastream 会以仅附加写入模式处理表,并且给定行的每个事件在 BigQuery 中都显示为单独的行。 |
在仅附加写入模式下执行回填时,数据会被复制。 | 当您为数据流选择仅附加写入模式时,您的数据将以 SELECT * FROM (SELECT *, row_number() OVER (PARTITION BY datastream_metadata.uuid) AS num FROM TABLE_NAME) WHERE num=1
|
Datastream 配置为合并写入模式,但更改未合并到 BigQuery 中。 | 验证源表中是否存在主键。BigQuery 需要它才能将更改合并到目标表中。 如果没有主键,请考虑在源表或目标表中添加一个主键。如需在 BigQuery 目标表中添加主键,请按以下步骤操作:
|
无法为已复制到 BigQuery 的表添加主键、移除主键或更改主键定义。 | 默认情况下,Datastream 不支持向已复制到 BigQuery 但无主键的表添加主键,也不支持从复制到 BigQuery 包含主键的表中移除主键。但是,您可以更改复制到 BigQuery 且已有主键的源表的主键定义:
|