准备要处理的表

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

目标标识列、触发器和约束的复制考虑

将数据复制到具有身份列、触发器以及级联和检查约束条件的目标 SQL Server 数据库时,请考虑以下事项:

要克服这些情况,可以根据复制用例实施多个选项。

使用数组处理改进 IDENTITY 复制

由于每个会话只有一个表可以将 IDENTITY_INSERT 设置为 ON,因此在将 IDENTITY 数据应用于会话中的多个表时,复制必须持续切换 IDENTITY_INSERT。要在此情况下提高复制的性能,请使用 BATCHSQL 参数。BATCHSQL 使 Replicat 使用数组处理,而不是一次应用一个 SQL 语句。

确保源表和目标表中的行唯一性

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 找到的任何现有主密钥或唯一密钥。