oracle cdc 12c,Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)

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

1 环境准备

源表:ODI_SRC.DEPT,ODI_SRC.EMP

目标表:ODI_TAG.DEPT, ODI_TAG.EMP

2导入并配置JKM

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

7fd52535d5b975bb4f7821d1965d02be.png

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

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

73bbd00893322674ea4bee457dbcf768.png

3启用 CDC 日记

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

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

0b330e8bc31ee5546e49540d25dfafa5.png

查看

918bc075e070cbe2bb2414000db2685a.png

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

4b6d16513313597b6db951852aaaa678.png

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

c535049144b714bcaac912bc3f2f165d.png

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

ca3cf00f5f400630a9ebb1a07c0d9573.png

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

5d623c02074eef91bba20c3858a718c1.png

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

4测试是否能够捕获变化

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

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

查看日记数据

a1b5abe10586ba50e22b55a9a61c5423.png

继续插入数据

insert into odi_src.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)

values ('6000', 'miller', 'clerk', '7782', sysdate, '1300', null, '60');

查看日记数据

29a8028c8ac11b1bad62afdbe7f46198.png

然后查询日记表:

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

06c10bf40731d02c17aec073f3514b82.png

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

1218ba80ba3a10c5da22432b04923b4f.png

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

f778bcdbe3b865c7053e9f2d674577a4.png

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

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

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

4ba3d6570df7dcc210b293419b376eff.png

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

68fcc47deedb61a2b87ecfe8ee896322.png

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

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

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

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

1817276e2aea201787abd0bdde8eb235.png

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

a634225f5f093fe1aa6c2bec83394c49.png

其他的和一般的映射相同

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

dd712910c756bc72256c7c11d90c38d0.png

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

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

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

4cfba2f85da6f5a97ef6309f8571b8ba.png47f2e7df672738432076e14ebdfe6edd.png

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

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

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

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

cb649bc0190f593ec3a0060e651c3c4e.png

7循环执行

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

c6f675c440174fc8febb8e8da30b634b.png

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

SELECT * FROM "ODI_SRC_WORK"."SNP_CDC_SET";

9c1f9c52b750e45819a678bef01b0995.png

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

3206a701df5e99bf57413659fbab5af4.png

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

参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值