使用 EXCEPTIONSONLY

EXCEPTIONSONLY 对于在 MAP 语句中显式命名和映射一对一的一对源表和目标表有效,即不能存在通配符。要使用 EXCEPTIONSONLY,请为要对目标使用 EXCEPTIONSONLY 的每个源表创建两个 MAP 语句:

有关这些参数的更多信息,请参阅Oracle GoldenGate 的参数和函数参考。

在这种情况下,除了表本身包含的相同列之外,还将创建四个额外的列:

DML_DATE
OPTYPE
DBERRNUM
DBERRMSG

要填充 DML_DATE 列,可以使用 @DATENOW 列转换函数来获取失败操作的日期和时间,并将结果映射到该列。要填充其他额外列,可以使用 @GETENV 函数返回操作类型、数据库错误编号和数据库错误消息。

例外 MAP 语句的 EXCEPTIONSONLY 选项导致该语句仅在对源表执行失败操作后执行。它可防止将每个操作记录到异常表中。

INSERTALLRECORDS 参数会导致指定源表的所有失败操作(无论操作类型如何)以 inserts 形式记录到异常表中。注:异常表不能存在主键或唯一索引限制。在此方案中可能存在唯一性违规,并会生成错误。

示例 9-21 EXCEPTIONSONLY

此示例说明如何将 REPERROR 与 EXCEPTIONSONLY 和异常错误 MAP 语句一起使用。此示例仅显示与 REPERROR 相关的参数;复制也需要其他与错误处理无关的参数。

REPERROR (DEFAULT, EXCEPTION)
MAP ggs.equip_account, TARGET ggs.equip_account2,
COLMAP (USEDEFAULTS);
MAP ggs.equip_account, TARGET ggs.equip_account_exception,
EXCEPTIONSONLY,
INSERTALLRECORDS
COLMAP (USEDEFAULTS,
DML_DATE = @DATENOW (),
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERRNUM = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG'));

在此示例中,为 DEFAULT 错误处理设置了 REPERROR 参数, EXCEPTION 选项导致 Replicat 进程将失败的操作视为异常错误并继续处理。