关于 Openflow Connector for Oracle

备注

此连接器受 Snowflake 连接器条款 的约束。

备注

除标准连接器服务条款外,Openflow Connector for Oracle 还需遵守其他服务条款。有关更多信息,请参阅 Openflow Connector for Oracle 附录

本主题介绍 Openflow Connector for Oracle 的基本概念、工作流和限制。

关于 Openflow Connector for Oracle

Openflow Connector for Oracle 可将 Oracle 数据库实例连接到 Snowflake,并近乎实时或按指定计划从选定表中复制数据。该连接器还会创建一个包含所有数据更改的日志,可与当前已复制的表状态一起提供。

用例

连接器支持以下用例:

  • 将 Oracle 数据库表复制到 Snowflake,实现全面集中报告。

许可模式和关键约束

Openflow Connector for Oracle 支持两种不同的许可模式。必须在安装之前选择正确的许可模式。如果未选择正确的许可模式,可能会导致部署失败或产生非预期的费用支出。

有关详细的许可条款、比较和配置说明,请参阅 Oracle XStream许可

1.嵌入式许可证(Snowflake 提供)

Snowflake 直接向您提供 Oracle XStream 许可证,但需支付相应费用。在此模型下,您无需与 Oracle 直接签订合同即可使用 XStream 复制功能。有关更多信息,请参阅 嵌入式许可证详细信息 以及 Openflow Connector for Oracle 附录

术语

详细信息

计费

许可证费用及支持与维护 (S&M) 费用将从您的 Snowflake 容量中扣除。

承诺期

60 天试用期结束后,服务将进入为期 36 个月的固定期限,期间不可取消。

生命周期

  • 期满后(36 个月以上):在最初的 36 个月期限结束后,许可证费用降为 0 美元,但支持与维护 (S&M) 费用仍按年收取。

  • 锁定风险:如果您选择退出 S&M 续订,当 S&M 服务期结束时,该连接器将被永久锁定。如需解锁连接器,必须购买新的嵌入式许可证,这将重新触发一个为期 36 个月的全价承诺期。

管理 UI

所有许可证相关操作(开始/取消试用、监控使用情况、选择退出)均由 ORGADMIN 在 Snowsight 中的 Admin » Terms » Openflow for Oracle 下执行。有关分步说明,请参阅 Openflow Connector for Oracle:选择使用 时默认使用的角色和仓库。启用和管理商业条款

限制

以下客户不符合此选项的使用条件:

  • 公共部门实体。

  • 通过 GCP Marketplace 购买 Snowflake 的客户。

  • 通过第三方经销商与 Snowflake 签订合同的客户。

2.独立许可证(自带许可证 – BYOL)

您需要提供自己的 Oracle 许可证,其中包含 XStream 权限(例如,Oracle GoldenGate 许可证)。有关更多信息,请参阅 独立许可证 (BYOL) 详细信息

术语

详细信息

计费

Snowflake 不收取额外许可费用。仍需支付标准的存储和计算费用(例如,Openflow Compute)。

合规

您需自行确保遵守 Oracle 许可证的相关要求。

用途

公共部门、GCP Marketplace 客户以及经销商客户必须使用该模式。

选择 Oracle XStream 许可模式

Openflow Connector for Oracle 需要为 Oracle XStream 服务购买付费许可证。有两种许可模式可用:

  • 嵌入式 Oracle 许可证

  • 独立 Oracle 许可证(自带许可证 – BYOL)

请使用下表确定最适合您组织的许可模式。

考虑因素

嵌入式许可证

独立许可证 (BYOL)

适用对象

需要获得 Oracle XStream 技术许可,并希望通过 Snowflake 协议直接购买的客户。

已经拥有 Oracle GoldenGate 许可证,或拥有其他提供 XStream 使用权的 Oracle 协议的客户。

计费

根据源 Oracle DB 上的处理器核心数量,通过 Snowflake 进行计费。包含不可取消的 36 个月承诺期。还需支付支持与维护服务费用。

此外,仍需支付标准的存储和计算费用(例如,Openflow Compute)。

Snowflake 不会对 Oracle XStream 服务收取额外的许可或支持与维护费用。所有许可与合规责任均由您直接与 Oracle 负责。

仍需支付标准的存储和计算费用(例如,Openflow Compute)。

配置

需要在连接器参数中输入 Oracle DB 的 CPU 核心数量以及处理器乘数系数。

无需向 Snowflake 提供 CPU 的核心信息。

试用期

提供最长 60 天的免费试用(最多 16 个许可核心)。第 61 天起自动开始计费。

Snowflake 不提供试用期。您的使用需遵循现有的 Oracle 协议。

嵌入式许可证详细信息

选择此选项,即表示您通过 Snowflake 获取使用 Oracle XStream 技术与该连接器配合使用的许可权。请注意以下关键条款:

计费

Oracle XStream 服务按月计费,并从您的 Snowflake 容量余额中扣除。该费用包含两个部分:许可证费用和支持与维护 (S&M) 费用。许可证费用根据源 Oracle 数据库中的处理器核心数量计算,并乘以 Oracle 处理器核心系数。

承诺期(“第 61 天”规则)

提供前 60 天的免费试用(最多 16 个许可核心)。在 60 天试用期后继续使用该连接器,将触发 36 个月的固定计费周期(“初始期限”),且期间不可取消。

  • 自动转换:第 61 天起自动开始计费。为避免产生费用,必须在第 60 天之前通过 Admin » Terms » Openflow for Oracle 仪表板取消试用。

  • 锁定:如果您的 Snowflake 协议在该初始期限内终止,则初始期限内剩余的全部费用将立即到期支付。

期限结束后的续订及相关条款

初始期限结束后,许可证费用将变为 0 美元,但支持与维护 (S&M) 费用仍将继续收取。

  • 退出后果:您可以在 Admin » Terms » Openflow for Oracle 仪表板中选择退出 S&M 续订。但是,如果 S&M 服务终止,连接器处理器将被锁定。要恢复运行,您必须购买 NEW 嵌入式许可证(并重新开始 36 个月的全价承诺期)。

要求

您有责任在连接器配置中准确填写处理器核心数量以及正确的核心系数。如果源数据库硬件发生变化,则必须及时更新这些信息。

限制

以下情况不适用此选项:

  • 公共部门实体(例如,政府和教育实体)。

  • 通过 GCP Marketplace 购买 Snowflake 的客户。

  • 通过第三方经销商与 Snowflake 签订合同的客户(例如,CDW、Optiv)。

配置

要配置嵌入式许可证,请执行以下操作:

  • 在 UI 中查看并接受 Openflow Connector for Oracle 附录 中提供的条款。

  • 选择 Embedded License 类型。

  • 为源 Oracle 数据库输入 CPU 核心数量信息:**Total Cores**(源数据库服务器上的物理核心总数)以及 **Core Factor**(Oracle 处理器核心系数,例如 Intel 处理器为 0.5)。有关正确值,请参阅 Oracle 处理器核心系数表。

独立许可证 (BYOL) 详细信息

此选项适用于已经获得所需 Oracle 技术许可的客户。

要求

您需要自行负责确保对该连接器的使用符合现有 Oracle 许可协议的相关条款。Snowflake 不会对您的 Oracle 权益进行验证或审计。

配置

配置独立许可证 (BYOL):

在配置连接器时,无需填写任何核心数量或计费相关信息。

Openflow 要求

以下 Openflow 运行时要求适用于 Openflow Connector for Oracle:

  • 运行时大小必须至少为 Medium。复制大容量数据时请使用更大的运行时环境,尤其是在行大小较大的情况下。

  • 该连接器不支持多节点 Openflow 运行时。使用 Min nodes 配置此连接器的运行时,并将 Max nodes 设置为 1

支持的 Oracle 版本和平台

支持以下 Oracle 数据库版本和平台:

  • Oracle 数据库版本 12cR2 及更高版本

  • 本地服务器

  • Oracle Exadata

  • OCI VM/Bare Metal

  • AWS Custom RDS for Oracle

  • AWS Standard Single-tenant RDS for Oracle

限制

以下限制适用于 Openflow Connector for Oracle:

  • 不支持 AWS Standard Multi-tenant RDS for Oracle。

  • 不支持 Oracle Autonomous Databases (ATP/ADW)。

  • 不支持 Oracle SaaS 产品,例如 Oracle Fusion Cloud Applications 和 NetSuite。

  • 对于 BYOC,该连接器需要 Openflow 部署版本 0.55.0 或更高版本。

  • 必须在安装所需的 Openflow 部署版本之后创建 Openflow 运行时。

  • 仅包含主键的数据库表才支持复制。

  • 连接器在单个数据库/容器内工作(PDB 或 CDB)。要复制多个容器中的表,需要为每个容器分别配置独立的连接器实例。

  • 该连接器不支持在列被删除后再次添加同名列。

  • 该连接器不会复制大于 16 MB 的单个值。默认情况下,如果处理到此类值,对应的表将被标记为永久失败。为避免表失败,请修改 Oversized Value Strategy 目标参数。

  • 在从最早位置重新读取重做日志时,不支持架构变更(例如使用 ALTER TABLE 语句添加或删除列)。如果某个表的架构在最早可用的 SCN 与当前日志位置之间发生过变化,则应先将该表从复制中移除,然后通过新的快照重新添加。

连接器的工作原理

以下部分将介绍该连接器在不同场景下的工作方式,包括数据复制、架构变更以及数据保留。

如何复制表

表的复制分为以下几个阶段:

  1. 架构自检:连接器会发现源表中的列、包括列名和数据类型,然后根据 Snowflake 和连接器的 限制 来验证它们。连接器会发现源表中的列、包括列名和数据类型,然后根据 Snowflake 和连接器的 `限制`_ 来验证它们。验证失败会导致此阶段失败,并且周期完成。如果成功完成该阶段,连接器将会在 Snowflake 中创建一个空目标表。

  2. 快照加载:连接器将源表中的所有可用数据复制到目标表中。如果此阶段失败,则不会再复制任何数据。成功完成后,源表中的数据将在目标表中可用。

  3. 增量加载连接器跟踪源表中的更改并将这些更改应用到目标表。连接器跟踪源表中的更改并将这些更改应用到目标表。此过程将一直持续,直到从复制中移除该表。如果该阶段失败,将永久停止源表的复制,直到问题解决。

表复制状态

临时故障(例如连接错误)不会停止表的复制。但是,永久性故障(例如不支持的数据类型)会导致表复制无法进行。

要解决复制问题或验证表是否已成功从复制流中移除,请检查表状态存储:

  1. 在 Openflow 运行时画布中,右键点击处理器组并选择 Controller Services。系统将显示一个列出控制器服务的表。

  2. 找到标记为 Table State Store 的行,点击该行右侧的 More 三个垂直点表示更多选项 按钮,然后选择 View State

系统将显示表及其当前状态的列表。在搜索框中输入内容,可按表名筛选列表。可能的状态如下:

  • NEW:选择使用 时默认使用的角色和仓库。该表已加入复制计划,但复制尚未开始。

  • SNAPSHOT_REPLICATION:选择使用 时默认使用的角色和仓库。连接器正在复制现有数据。该状态会持续显示,直到所有记录都已写入目标表。

  • INCREMENTAL_REPLICATION:选择使用 时默认使用的角色和仓库。连接器正在主动复制变更。该状态会在快照复制结束后显示,并会一直保持,直到该表从复制中移除或复制失败。

  • FAILED:选择使用 时默认使用的角色和仓库。由于发生错误,复制已永久停止。

备注

Openflow 运行时画布不会显示表状态的变更,只会显示当前状态。变更不过,表状态的变化会在发生时记录到日志中。查找以下日志消息:

Replication state for table <database_name>.<schema_name>.<table_name> changed from <old_state> to <new_state>

如果由于永久性故障导致表无法复制,请将该表从复制中移除。解决了导致失败的问题后,可以将该表重新加入复制。有关更多信息,请参阅 重新启动表复制

了解数据保留

该连接器遵循一种数据保留策略:客户数据永远不会被自动删除。您对复制的数据拥有完全的所有权和控制权,连接器会保留历史信息,而不会将其永久移除。

这种方法具有以下影响:

  • 从源表删除的行会在目标表中被软删除,而不会被物理删除。

  • 从源表删除的列不会在目标表中删除,而是会被重命名。

  • 日志表会被无限期保留,不会自动清理。

目标表元数据列

每个目标表都包含以下用于跟踪复制信息的元数据列:

列名称

类型

描述

_SNOWFLAKE_INSERTED_AT

TIMESTAMP_NTZ

该行最初插入目标表时的时间戳。

_SNOWFLAKE_UPDATED_AT

TIMESTAMP_NTZ

行在目标表中最后一次更新时的时间戳。

_SNOWFLAKE_DELETED

BOOLEAN

指示该行是否已从源表中删除。当值为 true 时,表示该行已被软删除,并且在源表中不再存在。

软删除的行

当某一行从源表中删除时,连接器不会将其从目标表中物理删除。相反,连接器会通过将 _SNOWFLAKE_DELETED 元数据列设置为 true 来标记该行已删除。

这种方法使您能够:

  • 保留历史数据,以满足审计或合规要求。

  • 在需要时查询已删除的记录。

  • 根据自身需求决定何时以及如何永久移除数据。

要仅查询活动(未删除)的行,请在 _SNOWFLAKE_DELETED 列上进行筛选:

SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = FALSE;

要查询已删除的行,请执行以下操作:

SELECT * FROM my_table WHERE _SNOWFLAKE_DELETED = TRUE;

已删除的列

当源表中的列被删除时,连接器不会在目标表中删除对应的列。相反,该列会通过在列名后追加 __SNOWFLAKE_DELETED 后缀进行重命名,以保留历史数据。

例如,如果源表中名为 EMAIL 的列被删除,则在目标表中该列会被重命名为 EMAIL__SNOWFLAKE_DELETED。在列被删除之前已存在的行会保留原始值,而在删除之后新增的行在该列中将显示为 NULL

您仍然可以从重命名的列中查询历史数据:

SELECT EMAIL__SNOWFLAKE_DELETED FROM my_table;

重命名的列

由于 CDC(变更数据捕获)机制的限制,连接器无法区分“列被重命名”与“列被删除后新增一个新列”这两种情况。因此,当您在源表中重命名列时,连接器会将其视为两个独立操作:删除原始列,然后新增一个具有新名称的列。

例如,如果在源表中将列名从 A 重命名为 B,则目标表将包含:

  • A__SNOWFLAKE_DELETED:选择使用 时默认使用的角色和仓库。包含重命名前的值。重命名之后新增的行在此列中为 NULL

  • B:选择使用 时默认使用的角色和仓库。包含重命名后的值。在重命名之前存在的行在此列中为 NULL

查询重命名的列

要将原始列和重命名后的列作为一个统一列进行查询,可以使用 COALESCECASE 表达式:

SELECT
    COALESCE(B, A__SNOWFLAKE_DELETED) AS A_RENAMED_TO_B
FROM my_table;

或者使用 CASE 表达式:

SELECT
    CASE
        WHEN B IS NOT NULL THEN B
        ELSE A__SNOWFLAKE_DELETED
    END AS A_RENAMED_TO_B
FROM my_table;

为重命名的列创建视图

与其手动修改目标表结构,不如创建一个视图,将重命名的列统一呈现为单个列。推荐使用此方法,因为它能够保留原始数据,并避免对正在进行的数据复制造成潜在影响。

CREATE VIEW my_table_unified AS
SELECT
    *,
    COALESCE(B, A__SNOWFLAKE_DELETED) AS A_RENAMED_TO_B
FROM my_table;

重要

不建议手动修改目标表结构(例如删除或重命名列),因为这可能会干扰正在进行的复制过程,并导致数据不一致。

日志表

在增量复制过程中,来自源数据库的变更会先写入日志表,然后再合并到目标表中。连接器不会自动删除日志表中的数据,因为这些数据可能用于审计、调试或重新处理。

日志表会在与对应目标表相同的架构中创建,并遵循以下命名规则:

<TABLE_NAME>_JOURNAL_<timestamp>_<number>

其中:

  • <TABLE_NAME> 是目标表的名称。

  • <timestamp> 表示 Unix 纪元格式的创建时间戳(自 1970 年 1 月 1 日以来的秒数),用于确保唯一性。

  • <number> 从 1 开始,每当目标表架构发生变化时递增,这可能是由于源表架构变化或列筛选条件修改导致的。

例如,如果目标表名称为 SALES.ORDERS,则日志表名称可能为 SALES.ORDERS_JOURNAL_1705320000_1

重要

请勿在复制过程中删除日志表。移除正在使用的日志表可能导致数据丢失或复制失败。只有在对应的源表已完全从复制中移除后,才可以删除日志表。

管理日志表存储

如果需要通过删除旧的日志数据来控制存储成本,可以创建一个 Snowflake 任务,定期清理不再参与复制的表对应的日志表。

在实施日志清理之前,请验证:

  • 对应的源表已完全从复制中移除。

  • 您不再需要这些日志数据用于审计或处理。

有关创建和管理自动清理任务的信息,请参阅 任务简介

后续步骤

查看本主题后,可以考虑执行以下后续步骤: