SQL error 1403 mapping to

本文详细介绍了Oracle GoldenGate Delivery for Oracle过程中遇到的常见错误及其解决策略,包括表结构不一致、附加日志缺失、初始化方法错误、目标端级联删除与触发器未禁用等问题,并提供了具体的排查步骤与解决方案。
WARNING OGG-01154  Oracle GoldenGate Delivery for Oracle, rep1.prm:  SQL error 1403 mapping YYYYY.TABLE_CUR to YYYYY.TABLE_CUR OCI Error ORA-01403: no data found, SQL <UPDATE "YYYYY"."TABLE_CUR" SET "LOGOUT_TIME" = :a1 WHERE "USER_ID" = :b0>.
WARNING OGG-01003  Oracle GoldenGate Delivery for Oracle, rep1.prm:  Repositioning to rba 95422336 in seqno 1.
ERROR   OGG-01296  Oracle GoldenGate Delivery for Oracle, rep1.prm:  Error mapping from YYYYY.TABLE_CUR to YYYYY.TABLE_CUR.
gg中的1403造成的原因:
1、两端表结构不一致
使用desc检查两端的表结构,如果没有配置DDL,是非常有可能的
解决方法是:重新初始化
2、附加日志错误
在源端没有对这张表显示增加补充日志,也会报这个错误
info trandata schema.objectname
检查该对象的trandata是否enable,若为diable则需要先增加附加日志,然后再初始化该表
3、初始化方法错误导致不一致

4、目标端级联删除、trigger没有被禁止
select 'alter table '||owner||'.'||table_name||' disableconstraint '||constraint_name||';' 
 from dba_constraints 
 where constraint_type in ('R') and 
 owner in('YYYYY') 
 order by status,owner; 
select 'alter trigger '||owner||'.'||trigger_name||' disable;' 
 from dba_triggers 
 where owner in('YYYYY') 
 order by status,owner;
执行查询出来的语句
5、该表存在不写日志的DML操作
检查该表是否为force logging

根据以上报错:
1、检查是否添加补充日志
GGSCI (ecardpdb3) 4> dblogin userid ogg, password oggrep
Successfully logged into database.

GGSCI (ecardpdb3) 5> INFO TRANDATA YYYYY.TABLE_CUR

Logging of supplemental redo log data is enabled for table YYYYY.TABLE_CUR.

Columns supplementally logged for table YYYYY.TABLE_CUR: USER_ID.
2、检查discardfile
more /oracle/ogg/discards
Oracle GoldenGate Delivery for Oracle process started, group REP1 discard file opened: 2014-12-23 20:33:32

Key column NAME (1) is missing from delete on table YYYYY.TABLE_CUR
Missing 1 key columns in delete for table YYYYY.TABLE_CUR.
Current time: 2014-12-24 00:50:53
Discarded record from action ABEND on error 0

Aborting transaction on /oracle/oggrep/dirdat/lr beginning at seqno 3 rba 1404
                         error at seqno 3 rba 1404
Problem replicating YYYYY.TABLE_CUR to YYYYY.TABLE_CUR
Mapping problem with delete record (target format)...
*
ID = NULL
*
Process Abending : 2014-12-24 00:50:53
3、确定出是在ID=NULL这一行出现了问题,检查ogg两端的对应表的两端的满足该条件的记录的区别

最安全的解决办法就是重新初始化,当然如果对于个别的数据出入我们可以选择跳过部分数据,然后根据源端和目标端结合discardfile来手动修改数据源,以及配合handlecollision参数来解决等。
在映射处理器中遇到 `java.lang.NullPointerException` 错误通常表明在数据映射过程中某个对象或变量未被正确初始化,导致程序试图访问其属性或方法时抛出异常。要解决此问题,需要从以下几个方面入手: - **检查输入数据的完整性**:确保传入映射处理器的数据源中没有 `null` 值,或者在映射逻辑中加入对 `null` 的判断和处理。例如,在 Java 中可以使用 `Optional` 类来避免直接操作可能为 `null` 的对象: ```java Optional<String> optionalValue = Optional.ofNullable(someObject.getValue()); optionalValue.ifPresent(value -> { // 处理非 null 值 }); ``` - **验证映射配置**:确认映射规则或配置文件中的字段路径、类型转换等是否正确无误,避免因字段不存在或类型不匹配导致的 `NullPointerException`。例如,使用 MapStruct 进行对象映射时,确保目标字段与源字段名称一致或通过 `@Mapping` 注解明确指定映射关系: ```java @Mapper public interface UserMapper { UserMapper INSTANCE = Mappers.getMapper(UserMapper.class); @Mapping(source = "sourceField", target = "targetField") UserDto userToUserDto(User user); } ``` - **启用调试日志**:在映射处理器中开启详细的日志输出,记录每一步的输入输出值,有助于快速定位 `null` 对象出现的位置。例如,在 Spring Boot 应用中可以通过配置 `application.properties` 文件启用 Hibernate 的 SQL 日志: ```properties spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true ``` - **单元测试与边界条件测试**:编写覆盖各种边界情况的单元测试用例,特别是针对可能为 `null` 的输入参数进行测试,确保映射处理器能够优雅地处理这些情况,而不是直接抛出异常。例如,使用 JUnit 编写测试用例验证 `null` 输入的处理逻辑: ```java @Test public void testHandleNullInput() { MyMapper mapper = new MyMapper(); MyData result = mapper.map(null); assertNull(result); } ``` - **代码审查与静态分析**:定期进行代码审查,并利用静态代码分析工具(如 SonarQube)检测潜在的 `null` 引用问题,提前修复可能引发 `NullPointerException` 的代码段。 通过上述措施,可以有效减少甚至消除映射处理器中的 `NullPointerException` 错误,提高系统的稳定性和健壮性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值