一致性 CDC

一致性 CDC 中引入了变化集的概念。一个变化集中可以包括多个相互存在关联关系(如主外键引用关系)的表。CDC 在捕获和发布一个变化集中的变化时能够保证数据的一致性。这个练习介绍如何使用能够保证一致性的CDC。

1 环境准备

源表:ODI_SRC.DEPT,ODI_SRC.EMP

目标表:ODI_TAG.DEPT, ODI_TAG.EMP

配置拓扑结构见ODI Studio拓扑结构的创建与配置(Oracle)

模型反向工程见:Oracle Data Integrator 12c-模型(Model)和 数据存储(DataStore)

2导入并配置JKM

首先在项目中导入 JKM JKM Oracle Consistent

clip_image001

JKM 是为表生成并捕获日志的知识模块,需要在模型或表上面进行配置。

编辑模型ODI_SRC的日记记录,选择简单日记记录模式,并选择 JKM Oracle Consistent:

clip_image002

3启用 CDC 日记

一致性 CDC 同简单 CDC 在实现方式和功能上都有不同,但是在使用上大致相同。这里还是包含了这几步:添加到 CDC, 订阅 CDC,启动日记。

首先右键模型ODI_SRC→已更改数据捕获→添加到CDC

clip_image003

查看

clip_image004

右键模型ODI_SRC→已更改数据捕获→订户→订阅

clip_image005

在弹出窗口种输入订阅用户,如Consistent,然后添加

clip_image006

点击确定完成订阅。这会启动一个会话。请在 Operator 中检查会话完成情况。

clip_image007

接下启动日记:右键模型ODI_SRC→已更改数据捕获→启动日记

clip_image008

这个操作也会执行一个会话,该会话执行完之后也将会生成一些 CDC 专用的数据库对象。生成的内容同简单 CDC 类似。

4测试是否能够捕获变化

往 DEPT 中插入一行数据数据。

INSERT INTO ODI_SRC.DEPT (DEPTNO, DNAME, LOC) VALUES ('60', 'Assitant', 'BOSTON');

查看日记数据

clip_image009

继续插入数据

insert into odi_src.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) 
values ('6000', 'miller', 'clerk', '7782', sysdate, '1300', null, '60');

查看日记数据

clip_image010

然后查询日记表:

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 的右键弹出菜单中选择扩展窗口:

clip_image011

然后从模型 ODI_SRC 的右键弹出菜单中选择锁定订户:

clip_image011[1]

在弹出的窗口中选择并添加要锁定的订户,然后确定完成锁定:

clip_image012

这两个步骤都会提交一个会话。在 Operator 中查看会话执行情况。然后再查询视图

我们会发现视图中能看到变化数据了。

SELECT * FROM "ODI_SRC_WORK"."JV$DEPT";

clip_image013

SELECT * FROM "ODI_SRC_WORK"."JV$EMP";

clip_image014

5创建接口将变化数据同步到目标

在项目ODI_Exercise中创建接口Consistent_CDC_Dept 和 Consistent_CDC_Emp,这里以Consistent_CDC_Dept 表为例

在关系图中将 ODI_SRC 中的 EMP 添加到源,将 ODI_TRG中的 EMP 添加到目标数据存储,并自动映射。

然后选中源数据存储,选中“仅以进行日记记录的数据”,

clip_image015

指定日志过滤器,过滤器的内容是针对订户的,下面的例子表示当前接口将消费Consistent订户的数据:

clip_image016

其他的和一般的映射相同

然后配置好 LKM(使用LKM SQL TO Oracle),IKM(使用 Oracle Increamental Update),和 CKM。clip_image017

clip_image018

然后执行两个接口。我们看到变化数据被同步到了ODI_TAG中的DEPT和EMP表中。

但是我们会发现日记数据还在。也就是说对于使用了一致性设置的 CDC,接口同步完数据之后并不会自动清除日记。

我们需要执行另外两个操作来清除已经消费了的日记数据:解除锁定和清除日记。Designer 也提供了执行这两个操作的界面。

clip_image019 clip_image020

6创建一个包完成一个变化集的数据同步

一致性 CDC 会为一个模型创建一个变化集,变化集的名称同模型的名称相同。在ODI_SRC 变化集中包含了2张表:DEPT, EMP。

然后创建一个包CDC_Consistent_Pkg。在关系图中将模型ODI_SRC拖进来。指定类型为日记记录模型,选上扩展窗口和锁定订户,并且添加订户 Consistent:clip_image021

然后将 Consistent_CDC_Dept 和 Consistent_CDC_Emp拖进来。在最后再将模型 ODI_SRC 拖进来,指定类型为日记记录模型,选上清除日记和取消订户锁定,并且添加订户 Consistent:

clip_image021[1]

7循环执行

在上面的第一个日记记录模型ODI_SRC后面添加OdiWaitForLogData

clip_image001[4]

CDC集的名字可以通过下面的SQL查询

SELECT * FROM "ODI_SRC_WORK"."SNP_CDC_SET";

image

在上面的第2个日记记录模型ODI_SRC后面添加OdiSleep

clip_image002[4]

设置第一步为第一个模型ODI_SRC

参考:

http://odiexperts.com/cdc-consistent/

发布了17 篇原创文章 · 获赞 1 · 访问量 4273

猜你喜欢

转载自blog.csdn.net/qq_43211632/article/details/87607476