时间:2021-07-01 10:21:17 帮助过:4人阅读
查看日记数据
继续插入数据
insert into odi_src.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (‘6000‘, ‘miller‘, ‘clerk‘, ‘7782‘, sysdate, ‘1300‘, null, ‘60‘);
查看日记数据
然后查询日记表:
SELECT * FROM "ODI_SRC_WORK"."JV$DDEPT"; SELECT * FROM "ODI_SRC_WORK"."JV$DEMP";
可以查询到数据
但是,如果你执行下面的 SQL 查询
SELECT * FROM "ODI_SRC_WORK"."JV$DEPT"; SELECT * FROM "ODI_SRC_WORK"."JV$EMP";
你会发现查询不到内容。这是因为一致性 CDC 提供了按窗口扩展,按用户锁定并访问日记数据的机制。我们需要这种机制来保证在捕获和发布变化数据的时候不违反一致性。
Designer 提供了界面来扩展窗口和锁定订户。
首先从模型 ODI_SRC 的右键弹出菜单中选择扩展窗口:
然后从模型 ODI_SRC 的右键弹出菜单中选择锁定订户:
在弹出的窗口中选择并添加要锁定的订户,然后确定完成锁定:
这两个步骤都会提交一个会话。在 Operator 中查看会话执行情况。然后再查询视图
我们会发现视图中能看到变化数据了。
SELECT * FROM "ODI_SRC_WORK"."JV$DEPT";
SELECT * FROM "ODI_SRC_WORK"."JV$EMP";
在项目ODI_Exercise中创建接口Consistent_CDC_Dept 和 Consistent_CDC_Emp,这里以Consistent_CDC_Dept 表为例
在关系图中将 ODI_SRC 中的 EMP 添加到源,将 ODI_TRG中的 EMP 添加到目标数据存储,并自动映射。
然后选中源数据存储,选中“仅以进行日记记录的数据”,
指定日志过滤器,过滤器的内容是针对订户的,下面的例子表示当前接口将消费Consistent订户的数据:
其他的和一般的映射相同
然后配置好 LKM(使用LKM SQL TO Oracle),IKM(使用 Oracle Increamental Update),和 CKM。
然后执行两个接口。我们看到变化数据被同步到了ODI_TAG中的DEPT和EMP表中。
但是我们会发现日记数据还在。也就是说对于使用了一致性设置的 CDC,接口同步完数据之后并不会自动清除日记。
我们需要执行另外两个操作来清除已经消费了的日记数据:解除锁定和清除日记。Designer 也提供了执行这两个操作的界面。
一致性 CDC 会为一个模型创建一个变化集,变化集的名称同模型的名称相同。在ODI_SRC 变化集中包含了2张表:DEPT, EMP。
然后创建一个包CDC_Consistent_Pkg。在关系图中将模型ODI_SRC拖进来。指定类型为日记记录模型,选上扩展窗口和锁定订户,并且添加订户 Consistent:
然后将 Consistent_CDC_Dept 和 Consistent_CDC_Emp拖进来。在最后再将模型 ODI_SRC 拖进来,指定类型为日记记录模型,选上清除日记和取消订户锁定,并且添加订户 Consistent:
在上面的第一个日记记录模型ODI_SRC后面添加OdiWaitForLogData
CDC集的名字可以通过下面的SQL查询
SELECT * FROM "ODI_SRC_WORK"."SNP_CDC_SET";
在上面的第2个日记记录模型ODI_SRC后面添加OdiSleep
设置第一步为第一个模型ODI_SRC
Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)
标签: