准备要处理的表

您必须执行以下任务来准备要在 Db2 z/OS 的 Oracle GoldenGate 环境中使用的表。


禁用触发器和级联约束条件

对目标表禁用触发器、级联删除约束条件和级联更新约束条件,或者更改它们以忽略 Oracle GoldenGate 数据库用户所做的更改。Oracle GoldenGate 将复制由触发器或级联约束条件产生的 DML。如果在目标表上激活了相同的触发器或约束条件,则由于复制的版本,该触发器或约束条件将变得冗余,并且数据库将返回错误。请考虑以下示例,其中源表为 emp_src 和 salary_src,目标表为 emp_targ 和 salary_targ。

确保表的行唯一性

Oracle GoldenGate 需要源表和目标表上的唯一行标识符来查找用于复制更新和删除的正确目标行。

除非 TABLE 或 MAP 语句中存在 KEYCOLS 子句,否则 Oracle GoldenGate 将按以下优先级顺序选择要使用的行标识符:

  1. 主键

  2. 按字母数字顺序排列的第一个不包含时间戳或非实体化计算列的唯一键。

  3. 如果上述关键字类型均不存在(即使表中可能定义了其他类型的关键字),则 Oracle GoldenGate 将构造所有列的伪关键字数据库允许在唯一密钥中使用,不包括 Oracle GoldenGate 在密钥中不受支持的密钥或从 Oracle GoldenGate 配置中排除的密钥。

注:如果表中存在其他不可使用的关键字,或者表中没有关键字,则 Oracle GoldenGate 会将相应的消息记录到报表文件中。从所有列构建密钥会妨碍 Oracle GoldenGate 在源系统上的性能。在目标上,此键会导致复制使用更广泛、效率较低的 WHERE 子句。

  1. 如果表没有相应的键,或者您希望未使用现有键,则可以定义替代键(如果表具有始终包含唯一值的列)。通过在 Extract TABLE 和 Replicat MAP 参数中包含 KEYCOLS 子句,可以定义此替代关键字。指定的键将覆盖 Oracle GoldenGate 找到的任何现有主键或唯一键。请参阅 Reference for Oracle GoldenGate 中的 TABLE | MAP 。

使用 KEYCOLS 指定定制密钥

如果表没有上述行标识符类型之一,或者您希望不使用这些标识符,则可以定义替代键(如果表具有始终包含唯一值的列)。通过在 Extract TABLE 和 Replicat MAP 参数中包含 KEYCOLS 子句,可以定义此替代关键字。指定的键将覆盖 Oracle GoldenGate 找到的任何现有主键或唯一键。有关详细信息,请参阅 Oracle GoldenGate 参考。

使用 ROWID 列处理表

任何插入到包含数据类型为 ROWID GENERATED ALWAYS 的列(默认值)的目标表中的尝试都将失败,并显示以下 ODBC 错误:

ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.

您可以执行以下操作之一来准备包含 Oracle GoldenGate 要处理的 ROWID 列的表:

要解决方法 ROWID GENERATE ALWAYS:

  1. 对于源表,创建 Extract TABLE 语句,并在该语句中使用 COLSEXCEPT 子句以排除 ROWID 列。例如:

    TABLE tab1, COLSEXCEPT (rowidcol);

    COLSEXCEPT 子句将不捕获 ROWID 列并将其复制到目标表。

  2. 对于目标表,请确保 Replicat 不尝试使用 ROWID 列作为关键字。可通过以下方式之一执行此操作:

    • 在目标表定义中指定主键。

    • 如果无法创建键,请为表创建一个 Replicat MAP 参数,并在该语句中使用 KEYCOLS 子句,该子句包含除 ROWID 列以外的任何唯一列。复制将使用这些列作为键。例如:

      MAP tab1, TARGET tab1, KEYCOLS (num, ckey);

维护实体化查询表

要维护源实体化查询表与目标实体化查询表 (MQT) 之间的奇偶校验,请复制基表,但不复制 MQT。目标数据库根据 Replicat 应用到基表的更改维护 MQT。

下面是配置这些表的规则: