一致性 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

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

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

3启用 CDC 日记

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

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

查看

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

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

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

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

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

4测试是否能够捕获变化

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

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

查看日记数据

继续插入数据

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

查看日记数据

然后查询日记表:

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";

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

在项目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 也提供了执行这两个操作的界面。

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

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

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

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

7循环执行

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

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

SELECT * FROM "ODI_SRC_WORK"."SNP_CDC_SET";

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

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

参考:

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

Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)的更多相关文章

  1. Oracle Data Integrator 12c 安装(ODI安装)

    Oracle Data Integrator 12c 安装(ODI安装) 企业版安装步骤(包含独立安装步骤) 官网下载Oracle Data Integrator 12cR2 (12.2.1.0.0) ...

  2. Oracle Data Integrator 12c (12.1.2)新特性

    改进特性如下: 基于流程界面的声明式设计 在12c中,以前的接口(interface)已经改为映射(mapping),新的基于流程声明的设计方式更灵活,也更容易使用.在12c中,映射的实现是通过使用J ...

  3. Manipulating Data from Oracle Object Storage to ADW with Oracle Data Integrator (ODI)

    0. Introduction and Prerequisites This article presents an overview on how to use Oracle Data Integr ...

  4. Oracle Data Integrator 12c----简单CDC(Simple CDC)

    Simple CDC最简单的一种 CDC.在这里,每一张 CDC 的表的变化都是独立捕获的,不需要考虑多张存在主外键引用关系的表之间的数据一致性. 1 环境准备 源表:ODI_SRC.DEPT 目标表 ...

  5. Oracle Goldengate和Oracle Data Integrator的初步认识

    免责声明:     本文中使用的部分图片来自于网络,如有侵权,请联系博主进行删除 1. Oracle Glodengate是什么? GoldenGate是oracle的一种基于数据库日志的数据同步软件 ...

  6. Oracle Data Integrator与OWB的集成及迁移

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  7. Oracle Data Integrator 12cR1 (12.1.3.0.0)安装过程

    Oracle Data Integrator 12cR1 (12.1.3.0.0)安装过程 下载安装文件 Oracle Data Integrator 12cR1 (12.1.3.0.0) http: ...

  8. Oracle Data Integrator 12c-第一个映射

    一.创建"项目" 设计器->项目,点击插入项目图标, 在项目对话框的"定义"标签下输入项目名称如ODI_Exercise ,保存 二.导入知识模块 项目→ ...

  9. oracle data integrator与大数据平台的集成

    在最新版本的ODI中,通过使用各种知识模块,可在统一的界面上实现对传统数据库.hive, pig, spark, hdfs等的ETL操作,满足在同一系统或采用相同的方式实现ETL功能. 详细的内容可参 ...

随机推荐

  1. c# action<> func<> 这2个委托怎么用和理解

    其实很好理解的呢!~首先你需要明白,他们是委托的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 1.1定义一个委托: 比如,我们原来写委托: public de ...

  2. NAT模式

    NAT NAT模式中,就是让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网. NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网络,虚拟机的网卡,是在vmware提供的一 ...

  3. 【BZOJ】【4146】 【AMPPZ2014】Divisors

    暴力 由于值的范围很小($ \leq 2*10^6$),所以用一个cnt数组统计每个值有多少个数,然后从小到大,统计每个数的倍数即可. 根据调和数?的神奇性质= =这样是$O(nlogn)$的…… / ...

  4. dubbo源码解析-spi(二)

    前言 上一篇简单的介绍了spi的基本一些概念,在末尾也提到了,dubbo对jdk的spi进行了一些改进,具体改进了什么,来看看文档的描述 JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩 ...

  5. 如何使用VisualStudio2013编写和调试c语言程序

    觉得很多基础学习者对VS不太熟悉,我就转一篇觉得还不错的.转自:http://jingyan.baidu.com/article/f3ad7d0fe7ca0d09c3345b84.html 现在大多数 ...

  6. 使用TortoiseSVN的客户端钩子脚本触发Jenkins构建

    我们项目在开发过程中使用了Jenkins构建Windows版本,为了通过自动触发使构建的版本保持最新,可以采用的方法如下: Jenkins Poll SCM:设置Jenkins定时检查变更,在SVN版 ...

  7. go语言之进阶篇网络编程

    一.网络编程 1.网络分层架构 2.每层协议的功能 3.网络通信条件 网卡,mac地址(不需要用户处理)  arp --->通过IP找mac 逻辑地址,ip地址(需要用户指定)  ---> ...

  8. 随机蕨(Random Fern)

    最近在做 Zdenek Kalal 的 TLD 算法,其成果发表在CVPR 2010 上,文章的名字叫做 P-N Learning: Bootstrapping Binary Classifiers ...

  9. delphi判断.net FrameWork是否已安装

    判断系统中.NET FrameWork已安装版本的方法很多,比如检查C:\Windows\Microsoft.NET\Framework\下的子目录,但是子目录往往是包含版本号,比如v2.0.5072 ...

  10. python3 文件及文件夹路径相关

    1. #返回当前文件所在的目录 currentDir = path.dirname(__file__) # __file__ 为当前文件 2.获得某个路径的父级目录: parent_path = os ...