备机个别数据同步失败无任何显示|参数handlecollisions的作用

1.问题描述

在备机侧,明明有几条数据同步不成功,但在ggserr.log和discard文件中都没有显示。

2.handlecollisions参数的原因

参数的作用:控制replicat进程是否自动处理数据重复或数据丢失的冲突。
parameters to control whether or not Replicat tries to resolve duplicate-record and missing-recorderrors when applying SQL on the target.

3.HANDLECOLLISIONS如何工作

分了3种情况:

  1. 如果是keycols更新:
    1)如果旧主键不在目标表:则update转换成insert
    2)如果新主键已在目标表:先删除旧主键的记录,然后覆盖新主键的记录。(旧主键的在源端已不存在,所以删除;新主键的记录,可以当做update)
  2. 如果是主键(或keycols)重复错误:
    用trail的记录覆盖目标表记录。
  3. 如果是找不到记录的错误:
    如update、delete,丢弃,但不反映在discard文件中。

可以看出来,handlecollisions还是很“体贴”的,考虑了数据不一致的各种情况。

4.用法

1.可以全局使用

HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;

2.可以局部使用

HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
NOHANDLECOLLISIONS
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;

3.可以针对特定的表

HANDLECOLLISIONS
MAP hr.emp, TARGET hr.emp;
MAP hr.job_hist, TARGET hr.job_hist;
MAP hr.dep, TARGET hr.dep, NOHANDLECOLLISIONS;
MAP hr.country, TARGET hr.country, NOHANDLECOLLISIONS;  

5.总结下

1.开启HANDLECOLLISIONS后,OGG会用预设的逻辑处理两边数据不一致的情况;如update变insert、或覆盖等。
2.在初始化同步阶段可以使用,因为静态同步的数据和trail中可能冲突。
3.正式环境后,应该关闭,让错误暴露出来,方便运维排查。

猜你喜欢

转载自blog.csdn.net/heroicpoem/article/details/106732457