将表演变更改从源传播到目标

Oracle GoldenGate 将复制表更改,包括缺少的表事件。启用 AUTOSCHEMA 时,更具体地说,在处理线索文件中的表定义记录 (TDR) 时,会在表映射期间检测到缺少的表事件。

以下步骤解释了此工作流:

  1. 复制尝试解析目标表的元数据。如果元数据解析失败并出现 object not found 错误,则表示目标数据库上不存在目标表。

  2. 如果启用了 AUTOSCHEMA 功能,则会根据 TDR 记录中的源元数据生成缺少的目标表的 CREATE TABLE 语句。

    1. 在为目标表的列选择合适的数据类型时,将使用基于目标数据库类型的默认数据类型映射模板。

    2. CREATE TABLE 语句是根据目标数据库的 SQL 语法生成的,考虑用户首选项(如果指定)。您可以指定以下首选项:

      1. 复制参数文件中相应 MAP 状态菜单的 TARGET 子句中指定的目标表名。

      2. 默认情况下,目标表列的名称与源表列相同,但是,您可以使用 COLMAP 选择不同的名称。

      3. 可以使用 TYPEMAP 为特定源数据类型名称(或源列)选择定制数据类型名称(在目标数据库中可用)。如果支持的数据类型(及其限制)在源数据库和目标数据库之间可能不同,则适合这种情况。

  3. 如果操作符合配置的过滤条件(例如 INCLUDE/EXCLUDE 规则),则复制过程会自动处理使用生成的 CREATE TABLE 语句创建新表。如果出现临时问题,系统会根据配置的重试设置多次尝试应用更改。如果这些重试后仍无法应用更改,复制将停止,并报告错误。

在目标表中传播列演变

在表映射期间检测到目标表事件中缺少的列。更具体地说,在处理表定义记录 (TDR) 时。

  1. 复制尝试解析目标表的元数据。在这种情况下,由于存在目标表,元数据解析不会失败,但会返回有效的目标表定义结构。

  2. 如果启用了 AUTOSCHEMA,则将目标表定义中的元数据与传入 TDR 记录中的源表的元数据进行比较。这是为了检测 TDR 记录中源表元数据中在目标表定义中不可用且在上一步中检索的任何其他列。

    1. 根据目标数据库类型使用默认数据类型映射模板,同时为目标表的新列选择最合适的数据类型。

    2. 将根据目标数据库的 SQL 语法生成 ALTER TABLE ADD COLUMN 语句。

      可以为特定源数据类型名称(或源列)选择定制数据类型名称(在目标数据库中可用)。如果支持的数据类型(及其限制)在源数据库和目标数据库之间可能不同,则适合这种情况。

  3. 如果标识了任何此类附加列,则会根据 TDR 记录中的源元数据(更具体地说是 TDR 记录中的附加列)生成 ALTER TABLE ADD COLUMN 语句(对于现有目标表)。

仅当相应的 DDL 通过 DDL 文件字符串条件(带有 OBJTYPE/OPTYPE/OBJNAME 选项的 DDL INCLUDE/EXCLUDE 条件)时,现有 DDL 复制基础结构才会执行生成的 ALTER TABLE DDL。由于 DDL 复制基础结构也用于 AUTOSCHEMA,因此也使用非致命错误代码的重试逻辑。重试逻辑还具有可配置的重试次数和重试之间的延迟。如果生成的 DDL 执行即使在重试后也会失败,则复制将异常终止。