从 Oracle 数据库中使用复制作业进行变更数据捕获(预览版)

本教程介绍如何使用复制作业中的变更数据捕获(CDC)有效地将数据更改从 Oracle 数据库复制到目标。 Oracle CDC 利用 LogMiner(一个内置的 Oracle 数据库实用工具)读取联机和存档的重做日志文件来捕获数据更改。 这可确保目标数据自动保持最新状态。

先决条件

在开始之前,确保你拥有:

Oracle 数据库要求:

  • 有权访问源表的 Oracle 数据库(版本 11g 或更高版本)。
  • 数据库必须在 ARCHIVELOG 模式下运行。 ARCHIVELOG 模式使 Oracle 能够存档重做日志文件,这是 LogMiner 访问历史更改所必需的。
  • 必须启用数据库级补充日志记录(至少启用最小补充日志记录)。
  • 必须在要从中捕获更改的每个表上启用表级补充日志记录
  • 具有访问 LogMiner 和读取重做日志所需的权限的数据库用户(有关详细信息,请参阅 通过 Oracle 上的 LogMiner 启用 CDC )。
  • 存档重做日志的保留时间必须长于计划复制作业运行之间的间隔,以避免数据丢失。

有关 Oracle LogMiner 和补充日志记录的详细信息,请参阅官方 Oracle 文档:

构造要求:

  • 具有创建复制作业所需的权限的 Fabric 工作区。
  • 用于 CDC 复制的目标数据存储由复制作业支持。
  • 运行版本 3000.310 或更高版本的本地数据网关,配置为连接到 Oracle 数据库。

小窍门

在 Oracle 中使用SYSDBA角色或DBA角色执行管理任务,例如启用 ARCHIVELOG 模式和授予 LogMiner 特权。 对于日常 CDC 操作,请创建仅具有所需权限的专用用户。

通过 Oracle 上的 LogMiner 启用 CDC

Oracle 使用 LogMiner 从重做日志文件捕获数据更改。 若要启用 CDC,必须配置 ARCHIVELOG 模式、补充日志记录和适当的用户权限。 按照以下步骤为 CDC 设置 Oracle 数据库。

步骤 1:启用 ARCHIVELOG 模式

ARCHIVELOG 模式可确保 Oracle 存档重做日志文件,LogMiner 需要通过这些文件来读取历史变更。 检查并启用 ARCHIVELOG 模式:

  1. 以具有特权的用户 SYSDBA 身份连接到 Oracle 数据库。

  2. 检查当前存档日志模式:

    SELECT LOG_MODE FROM V$DATABASE;
    

    如果结果显示 NOARCHIVELOG,请继续执行以下步骤来启用它。

  3. 在装载模式下关闭并重启数据库,然后启用 ARCHIVELOG 模式:

    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
    
  4. 验证是否已启用 ARCHIVELOG 模式:

    SELECT LOG_MODE FROM V$DATABASE;
    

    结果应显示 ARCHIVELOG

重要

启用 ARCHIVELOG 模式需要重启数据库。 在维护时段内规划此更改,以最大程度地减少对生产环境的影响。

有关详细信息,请参阅 Oracle 文档中 的“管理存档的重做日志文件 ”。

步骤 2:启用补充日志记录

补充日志记录在重做日志文件中记录额外的列数据,这是 LogMiner 准确重构数据更改所需的。

  1. 请启用最小数据库级别的补充日志记录:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
    
  2. 启用表级补充日志记录,以捕获每个表中的更改。 对于每个表,请运行以下命令之一:

    要记录所有列(建议用于完全跟踪所有更改):

    ALTER TABLE <schema_name>.<table_name> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    

    仅记录主键列:

    ALTER TABLE <schema_name>.<table_name> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
    

    替换 <schema_name><table_name> 为你的架构和表名。

    例:

    ALTER TABLE sales.customers ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    ALTER TABLE sales.orders ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
  3. 验证是否在数据库级别启用了补充日志记录:

    SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_ALL
    FROM V$DATABASE;
    

    请确认 SUPPLEMENTAL_LOG_DATA_MIN 显示 YES

  4. 验证表级补充日志记录:

    SELECT OWNER, TABLE_NAME, LOG_GROUP_NAME, LOG_GROUP_TYPE
    FROM DBA_LOG_GROUPS
    WHERE OWNER = '<schema_name>'
      AND TABLE_NAME = '<table_name>';
    

有关详细信息,请参阅 Oracle 文档中的 补充日志记录

步骤 3:创建 LogMiner 用户并授予权限

为 LogMiner CDC 操作创建专用数据库用户,并授予所需的权限:

  1. 创建用户:

    CREATE USER <logminer_user> IDENTIFIED BY <password>;
    
  2. 授予所需的权限:

    GRANT CREATE SESSION TO <logminer_user>;
    GRANT SELECT_CATALOG_ROLE TO <logminer_user>;
    GRANT CONNECT, RESOURCE TO <logminer_user>;
    GRANT EXECUTE_CATALOG_ROLE TO <logminer_user>;
    GRANT FLASHBACK ANY TABLE TO <logminer_user>;
    GRANT SELECT ANY DICTIONARY TO <logminer_user>;
    GRANT SELECT ANY TABLE TO <logminer_user>;
    GRANT LOGMINING TO <logminer_user>;
    

    <logminer_user><password>替换为你所需的用户名和密码。

    注释

    LOGMINING 权限在 Oracle 12c 及更高版本中可用。 对于 Oracle 11g,请改为授予 SELECT ANY TRANSACTION

  3. 授予对源表的 SELECT 访问权限:

    GRANT SELECT ON <schema_name>.<table_name> TO <logminer_user>;
    

    对每个源表重复此命令。

  4. 验证 Oracle 连接使用的用户是否具有 FLASHBACK ANY TABLE 权限。 复制作业需要具备此权限,才能在初始完整加载期间捕获一致性快照。

    SELECT GRANTEE, PRIVILEGE
    FROM DBA_SYS_PRIVS
    WHERE PRIVILEGE LIKE 'FLASHBACK%'
    ORDER BY GRANTEE, PRIVILEGE;
    

    GRANTEE 列应包括 Oracle 连接中配置的用户名。 FLASHBACK ANY TABLE如果未为该用户列出该权限,请授予它:

    GRANT FLASHBACK ANY TABLE TO <logminer_user>;
    

注释

  • LogMiner 读取重做日志文件以捕获 INSERT、UPDATE 和 DELETE 操作。
  • 在表级补充日志记录之前,必须启用数据库级补充日志记录。
  • 存档的重做日志占用额外的磁盘空间。 配置适当的保留策略,以平衡存储成本和 CDC 要求。
  • 确保重做日志保留期长于计划的复制作业间隔,以防止更改数据丢失。

有关 Oracle LogMiner 的详细信息,请参阅官方 Oracle 文档 - 使用 LogMiner 分析重做日志文件

使用 Oracle 数据库 CDC 创建复制作业

注释

  • 以下步骤与使用复制作业通过 CDC 将数据从 Azure SQL DB 引入到另一个 Azure SQL DB时执行的步骤非常相似。

完成以下步骤,创建新的复制任务,以通过 CDC 将数据从 Oracle 数据库导入目标:

  1. 选择 “+ 新建项”,选择 “复制作业 ”图标,命名复制作业,然后选择“ 创建”。

    展示如何导航到数据工厂主页并创建新复制作业的屏幕截图。

  2. 选择要从中复制数据的数据存储。 在此示例中,选择 Oracle 数据库

  3. 输入 连接详细信息凭据 以连接到 Oracle 数据库。 可以使用本地数据网关在虚拟网络环境中安全地复制数据。

  4. 应清楚地看到已启用 CDC 的源表。 选择 已启用 CDC 的表 进行复制。

    启用了 CDC 的表: 显示 cdc 表图标的屏幕截图。

    未启用 CDC 的表: 显示无 cdc 表图标的屏幕截图。

    显示复制作业的 cdc 表选择位置的屏幕截图。

  5. 选择目标商店。 选择支持 CDC 合并或更新插入操作的目标,以实现最佳的 CDC 复制。

    屏幕截图显示在哪里选择复制作业的目标存储位置。

  6. 选择 增量复制 ,你会发现无需为每个表输入增量列来跟踪更改。 默认 的 Update 方法 应设置为 “合并”,并且所需的键列将默认与源存储中定义的主键匹配。

    注释

    最初,复制作业执行一次完整加载,然后通过 CDC 在后续运行中执行增量副本。

    屏幕截图显示如何选择 CDC。

  7. 查看作业摘要,将运行选项设置为按计划,然后选择“ 保存 + 运行”。

    注释

    确保 Oracle 存档的重做日志保留期长于计划运行之间的间隔;否则,如果保留期内未处理,则更改的数据可能会丢失。

  8. 复制作业会立即启动。 第一次运行复制初始完整快照。

  9. 通过插入、更新或删除行来更新 Oracle 中的源表。

  10. 再次运行复制作业以获取并复制所有更改,包括插入、更新和删除的行,并将其复制到目标。

后续步骤