复制副本在插入时失败,找不到数据



无法理解插入在哪种情况下会失败,并且没有发现数据错误。有什么见解吗。

Oracle GoldenGate Delivery for Oracle process started, group REPA discard file opened: 2020-08-21 18:32:07.326069
Current time: 2020-08-21 18:32:08
Discarded record from action ABEND on error 1403
No data found
Aborting transaction on /zfssa/gg_02/ogg/dirdat/REPA/EX beginning at seqno 473 rba 425209949
error at seqno 473 rba 425214669
Problem replicating SRC.TABLE to TGT.TABLE.
Record not found
Mapping problem with insert record (target format) SCN:3329198919.29.23.78560...

未找到数据的错误通常指向不一致性问题。REPLICAT基本上是一个使用SQL语句进行数据操作的应用程序。如果它试图执行DML,而数据库拒绝了它,通常是因为与尝试的DML和与其相关的记录不一致

例如,尝试删除不存在的行将失败,并出现数据库错误。除了Oracle GoldenGate错误之外,这通常指向目标数据库不一致。换句话说,目标数据库处于客户没有预料到的状态。

确定目标数据库未处于预期状态的原因。造成这种情况的原因有很多,下面是一些原因。这份清单绝非详尽无遗。

可能的原因

  • 使用参数来忽略以前的错误,如HANDLECOLLISIONS、带有ignore或DISCARD选项的REPERROR
  • 源数据库和目标数据库之间不同的主键或键列。它们可能是相同的列,但类型和/或大小不同
  • 目标数据库由应用程序操作
  • 目标复制副本通过过滤器和选择进行映射,或者提取DML操作具有过滤器。这将基于您的业务需求,可能是有意的,也可能不是有意的
  • 非主键表更新。如果所有列都用于复制,则可能会发生多个更新,从而导致后续DML操作失败
  • 使用KEYCOLS的非主键表更新。这些密钥可能不是唯一的。要测试所选键的唯一性,请基于这些KEYCOLS在源数据库上运行查询并对其进行排序
  • 使用的语言和字符集(NLS、双字节或多字节字符集)不同,可能会导致数据库自动执行的意外转换问题。使用SETENV参数更改语言,并将其设置在USERID参数之前
  • 源数据库和目标数据库的类型不同,例如Oracle到MSSQL,并且对主键或键列进行的转换不是您所期望的
  • 还有其他特定的配置、补丁、功能、默认数据库行为等。在My Oracle Support(MOS)知识库中搜索数据库错误号,例如:";ORA-01403";在Oracle GoldenGate核心产品下。查看这些知识解决方案,看看它们是否与您的问题有关
  • 在极少数情况下,这可能是Oracle GoldenGate的错误,因为没有捕获特定的DML或对值的解释不正确。如果您认为情况确实如此,请提交SR。除了上述目标复制副本报告和材料外,您还需要提供源机器和GoldenGate轨迹上的所有提取报告
  • 带有ALLOWDUPATARGETMAP参数的replicat参数中存在重复映射
  • 提取参数THREADOPTIONS PROCESSTHREADS的使用不正确。这可能会导致它丢失数据

可能的解决方案

  1. 您需要什么来调查复制副本数据库问题

首先,您需要replicat参数文件、报告文件和丢弃文件。报告文件:包含所有警告、错误、已映射的表、已映射或未映射的列以及所有运行时环境设置。丢弃文件:详细显示映射此表的问题,该表生成数据库错误、列、其值、记录在GoldenGate跟踪中的位置。参数文件:通常参数在报告文件中,但如果报告文件已滚动(REPORTROLLOVER参数),这将非常有用。

  1. 接下来的步骤是什么

根据上述数据查询目标数据库。根据数据库错误,报告文件和/或丢弃文件可能包含所使用的确切SQL语句。然而,应该能够构造适当的查询。这是为了确认复制副本确实报告了正确的数据库错误。例如,如果Oracle DB错误为ORA-01403,这意味着找不到数据,则查询应该选择具有指定主键或关键字的行。您的查询应该返回与复制副本相同的结果。

  1. 修复复制副本

首先要考虑的是,您是否可以暂时忽略此错误,稍后再解决此问题。如果您的业务允许您这样做,那么您可以完全排除此表(TABLEEXCLUDE),也可以跳过此错误(REPERROR,DISCARD)。如果跳过错误,则使用REPERROR启动复制副本,但运行一小段时间(停止复制副本)并删除此REPERROR。然后重新启动复制副本。

  1. 修复数据库

无论原因是什么,都需要重新同步导致此问题的表。

  1. 配置问题

如果您在replicat参数文件中的replica参数中有Duplicate映射,并且使用了ALLOWDUPTARGETMAP参数,则DML将应用两次。这导致删除操作出现ORA-1403错误,插入操作出现ORA-001错误。删除重复的映射以解决问题。

总之,在GoldenGate的复制过程中,有很多可能出现未找到数据的错误。

这也可能取决于您正在使用的复制副本的类型。它们中的许多在实际执行DML语句之前在数据库中执行查询。您的错误通常可能是由于目标数据库中缺乏权限,或者您使用的是数据库保管库之类的东西,或者其他操纵DML执行方式的技术。

最新更新