一、触发器
在被抽取的源表上建立插入、修改、删除三种触发器,当源表中数据发生变化,相应的触发器将变化的数据写入一个增量日志表,日志表只存储源表名称、更新关键字值和操作类型(insert,update,delete)。ETL先从日志表取源表名称和关键字值,再去源表抽取完整记录,根据操作类型对目标表做处理。
二、时间戳
通过比较系统时间与源表时间戳字段的值来决定抽取哪些数据,源表需存在时间戳字段,并且业务系统在更新时要更新时间戳。
但是对delete操作无法捕获,数据准确性受影响。
注:可在业务层面避免delete操作,采取对数据增加删除标识字段的方法来处理。
三、全表删除插入方式
每次抽取前,先删除目标表数据,全部抽取全部加载,缺点是效率很差。
四、全表比对方式
在抽取时,ETL进程逐条比较源表和目标表数据,将变化的记录读取出来。
优化:MD5比较
在源数据库建立一张结构和源表类似的MD5临时表,记录源表主键和根据所有字段计算出的MD5校验码。每次抽取时,对源表和MD5临时表进行MD5比对,性能很差。
五、系统日志分析
分析数据库本身的日志,判断变化的数据。
1.oracle提供了日志专用程序包LogMiner,可以简化工作;
2.CDC方式,改变数据捕获,可分为同步CDC和异步CDC;
3.闪回查询方式,oracle允许用户查询过去某个时刻的数据库状态,利用当前状态和上次抽取时状态对比,快速得出数据记录变化状况。