一、问题描述
通过OGG进行两个库的数据同步,其中一个表数据存在问题,需要全量重新生成,没有多考虑,直接对源表 truncate 了,在源端全量生成数据的时候,检查发现目标端数据比源表多了一倍多。
二、问题解决过程
1)分析目标表,发现老的数据没有被清理掉。
2)从基本的原理入手,关键在两个问题:
- OGG抽取的日志是什么类型的?该类型的日志那些操作会产生?
从OGG官方文档中可以看到,OGG抽取的是 Transaction Log,是事务日志。 OGG读取顺序是先读取联机日志,联机日志没读到再读取归档日志。
- truncate 操作会不会产生日志,如果能产生,是否能被OGG抽取到?
查询发现truncate操作不会产生联机和归档日志,所以在源端进行truncate操作不会通过OGG同步删除数据记录的操作。