准备要处理的表

必须在 Teradata 的 Oracle GoldenGate 环境中解决以下表属性。

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

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

  1. 对 emp_src 发出删除。

  2. 它将删除级联到 salary_src。

  3. Oracle GoldenGate 会将两项删除操作发送到目标。

  4. 父删除首先到达,并应用于 emp_targ。

  5. 父删除将删除级联到 salary_targ。

  6. salary_src 中的级联删除将应用于 salary_targ 。

  7. 无法找到该行,因为已在步骤 5 中将其删除。

确保表的行唯一性

Oracle GoldenGate 在源表和目标表上需要某种形式的唯一行标识符,以查找用于复制更新和删除的正确目标行。

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

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

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

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

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

使用 KEYCOLS 指定定制密钥

如果表没有适用的行标识符,或者您希望不使用标识符,则可以定义替代键,前提是表具有始终包含唯一值的列。您可以通过在 Extract TABLE 参数和 Replicat MAP 参数中包含 KEYCOLS 子句来定义此替代关键字。指定的密钥将覆盖 Oracle GoldenGate 找到的任何现有主密钥或唯一密钥。

处理大规模更新和删除操作

更新或删除大量行的操作会为订户数据库上的每行生成离散更新和删除。这可能会导致 Teradata 订户系统上出现锁定管理器溢出,从而终止复制进程。

为避免这些错误,请暂时暂停这些操作的复制,然后在源系统和目标系统上手动执行这些操作。要暂停复制,请使用以下命令,该命令仅暂停该会话的复制。该表上的其他会话的操作将正常复制。

set session override replication on;
commit;