KingbaseFlySync delete语句WHERE条件缺失的解析出错问题处理思路
阅读原文时间:2023年07月15日阅读:5

KingbaseFlySync delete语句WHERE条件缺失的解析出错问题处理思路

关键字:

KingbaseFlySync、Linux、x86_64、mips64el、aarch64、Java

kes到Oracle同城灾备场景

源:kesv8r6c5b0023一主一备
目标端:Oracle rac 11g (4个实例)

注意本操作比较危险,需要核实源生产库归档是否存在,如果可以的话,考虑采用别的方式,比如跳过报错事务,通过数据比对方式修复等等

1、目标端KFS后台日志报错ORA-00936:缺失表达式

从上图报错可知:delete from "USERTMP"."AFFIX_INFO" WHERE 解析存在问题。
根据报错的日志号,查找该日志号解析,发现where条件部分确实缺失。

2、 检查源端kfs配置文件

从以上KFS源端配置中,源端过滤器存在custompkey存在无主键过滤器和无主键配置文件custompkey.json。

3、 检查表是否有配置无主键解析

\d AFFIX_INFO检查是否有配置identity full。
如果没有的话,无法解析delete和update业务。
登录源生产库执行以下命令:
alter table AFFIX_INFO REPLICA IDENTITY FULL;

4、 检查无主键配置文件custompkey.json

在custompkey.json存在"affix_info":"",配置,这意味着把affix_info所有列过滤了,解决办法一:在custompkey.json删除"affix_info":"";解决办法二:把那个表affix_info的配置改对,比如"affix_info":"id",表示将id列作为表的主键。
此步我们采用解决办法一。

5、 在源端生产库确认最旧归档日志时间

从归档日志的日期看,最旧的归档是在13号,目前delete解析的业务是15号,如下图红框。

6、 在KFS源端清除解析错误日志号

fsrepctl -service kesoracle offline
kufl -service kesoracle purge -low 29623
选择y

7、 在KFS目标端清除解析错误日志号

kufl -service kesoracle purge -low 29623
选择y

8、 验证KFS源端kufl解析正常

replicator restart
fsrepctl service 看看解析日志号是否有往前走,确定解析正常后,执行如下命令验证kufl解析正常:
kufl -service kesoracle list -seqno 29623