Orcal ETL 增量抽取–ORA_ROWSCN伪列
1、背景
项目中需要进行orcal数据增量抽取,然而源表无主键,无时间戳,无唯一键,别人的业务系统又无法动。最开始想通过解析日志以及v$sql动态视图获取所有sql执行,搞了好久,太麻烦了。后来发现了ORA_ROWSCN伪列,事情就很简单了。分享出来,万一有人搜索到了,也算是一点点帮助。
2、ORA_ROWSCN使用
大致就是orcal为表中的每行数据维护了一个scn,每次更改数据,scn也会更改。通过ora_rowscn我们就可以做到insert、update方式的增量更新。delete不行,数据行被删除了,自然scn也不存在。
SQL语句:
–查迅ora_rowscn
select ora_rowscn from 表
– 根据ora_rowscn查询某个scn后的增量数据
select * from 表 where ora_rowscn>6081999049678
– 将时间戳转换为scn查询,时间戳比scn更直观,
select * from 表 where ora_rowscn>timestamp_to_scn(to_date(‘2020-08-10 09:00:00’,‘yyyy-mm-dd hh24:mi:ss’))
思路:
建一张中间表,存放需要增量抽取的源表表名和每次抽取的scn或timestamp,两个都可以。每次增量抽取根据ora_rowscn字段获取增量数据,进行抽取。抽取成功后更新对应表的scn或时间戳。