• Oracle Data Integrator 12c----一致性 CDC(Consistent 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/

  • 相关阅读:
    pylab
    通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证
    PRIMUS
    Ubuntu 下安装AMBER10/AmberTools 1.2
    SUPCOMB
    biopython
    python IDE
    SASREF
    PEAK
    ANDROID移植: WIFI设计原理(源码分析
  • 原文地址:https://www.cnblogs.com/xqzt/p/4510970.html
Copyright © 2020-2023  润新知