文档章节

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

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 1638
阅读 17
收藏 0
点赞 0
评论 0

Simple CDC最简单的一种 CDC。在这里,每一张 CDC 的表的变化都是独立捕获的,不需要考虑多张存在主外键引用关系的表之间的数据一致性。

1 环境准备

源表:ODI_SRC.DEPT

目标表:ODI_TAG.DEPT

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

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

2导入并配置JKM

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

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

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

clip_image001

3启用 CDC

ODI 提供简易的界面来启用 CDC,包括下面的步骤:添加到 CDC, 订阅 CDC,启动日记。

首先右键模型ODI_SRC(或者右键数据存储EMP)→已更改数据捕获→添加到CDC

clip_image002

点击刷新按钮可以看到模型ODI_SRC中的表的图表发生了变化,出现了黄色的小时钟:

clip_image003

如果没有黄色的小时钟表,可以在工具→首选项勾选上在树中显示CDC内容clip_image004

接下来从模型ODI_SRC的弹出菜单中选择启动日记(也可以对某一张表启动日记):

clip_image005

对于简单 CDC,启动日记的时候可以输入订阅的用户名。在弹出的窗口中录入订阅的用户名,如 Simple,点击添加订户:clip_image006

点击确定完成:

clip_image006[1]

这将会启动一个会话,

clip_image007

请在 Operator 中查看会话是否成功完成。这个会话会在数据库中创建一些对象:CDC 的数据字典表(SNP开头),日记表和视图(通常是J$JV$开头),trigger(通常以T$开头)。

clip_image008

可以发现EMP表,DEPT表上多了触发器,内容分别如下

触发器T$EMP(如果你只在表Dept上而不是模型上启动了日志,这没有这个)

create or replace trigger ODI_SRC_WORK.T$EMP

after insert or update or delete on ODI_SRC.EMP

for each row

declare

V_FLAG VARCHAR(1);

V_EMPNO NUMBER(4);

begin

if inserting then

V_EMPNO := :new.EMPNO;

V_FLAG := 'I';

end if;

if updating then

V_EMPNO := :new.EMPNO;

V_FLAG := 'I';

end if;

if deleting then

V_EMPNO := :old.EMPNO;

V_FLAG := 'D';

end if;

insert into ODI_SRC_WORK.J$EMP

(

JRN_SUBSCRIBER,

JRN_CONSUMED,

JRN_FLAG,

JRN_DATE,

EMPNO

)

select JRN_SUBSCRIBER,

'0',

V_FLAG,

sysdate,

V_EMPNO

from ODI_SRC_WORK.SNP_SUBSCRIBERS

where JRN_TNAME = 'ODI_SRC.EMP'

/* The following line can be uncommented for symetric replication */

/* and upper(USER) <> upper('ODI_SRC') */

;

end;
View Code

触发器T$DEPT

create or replace trigger ODI_SRC_WORK.T$DEPT

after insert or update or delete on ODI_SRC.DEPT

for each row

declare

V_FLAG VARCHAR(1);

V_DEPTNO NUMBER(2);

begin

if inserting then

V_DEPTNO := :new.DEPTNO;

V_FLAG := 'I';

end if;

if updating then

V_DEPTNO := :new.DEPTNO;

V_FLAG := 'I';

end if;

if deleting then

V_DEPTNO := :old.DEPTNO;

V_FLAG := 'D';

end if;

insert into ODI_SRC_WORK.J$DEPT

(

JRN_SUBSCRIBER,

JRN_CONSUMED,

JRN_FLAG,

JRN_DATE,

DEPTNO

)

select JRN_SUBSCRIBER,

'0',

V_FLAG,

sysdate,

V_DEPTNO

from ODI_SRC_WORK.SNP_SUBSCRIBERS

where JRN_TNAME = 'ODI_SRC.DEPT'

/* The following line can be uncommented for symetric replication */

/* and upper(USER) <> upper('ODI_SRC') */

;

end;
View Code

4测试是否能够捕获变化

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

insert into odi_src.dept (deptno, dname, loc) values ('60', 'assitant', 'boston');

然后查询日记表:

select * from odi_src_work.j$dept;

clip_image009

我们可以看到变化被捕捉到了日记表。

这时我们也可以在 ODI 中查看日记数据:

clip_image010

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

在项目ODI_Exercise中创建接口 Simple_CDC_Dept

clip_image011

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

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

clip_image011[1]

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

其他的和一般的映射相同

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

clip_image013 clip_image014

6执行 CDC 接口

执行Simple_CDC_Dept,并在 Operator 中查看结果,我们看到插入了一条记录。clip_image014[1]

在模型中查看 ODI_TAG的 Dept 表的数据:

clip_image015

clip_image016

我们可以看到变化的数据数据被同步过来了:

查看源表DEPT的日记数据:

clip_image017

我们看到已经没有了变化数据:

clip_image018

这说明一旦 ODI 接口消费了一张表的变化数据,相应的订户的日记数据将被清空。这种方式非常简单,但是对于多张存在主外键引用关系的表的数据同步将会有可能造成数据不一致的情况。对于这种复杂的情况需要一致性 JKM。

7创建包轮询变化数据

变化数据随时都可能生成,因此需要不断的将新的变化同步过去。有两种方法可以完成这个任务。

     第一种办法可以通过计划实现。例如创建一个计划,每半个小时执行一次同步接口。这样可以每半个小时将变化数据同步到目标。

     第二种办法是在创建一个包,利用ODI 提供的 CDC 相关的工具轮询日记,一旦有了变化就调用同步接口。

第一种办法要注意计划的重复间隔,要保证在重复调用之前,上一次调用已经完成,一般可以用于定期同步的需求。

第二种办法则可以满足实时性较高的需求。

首先创建一个包:Simple_CDC_Dept_Pkg

在关系图中添加用于 CDC 的工具: OdiWaitForLogData。如图配置属性:

clip_image019

按上面的配置将每1秒钟轮询DEPT的日记表,直到发现1条变化记录。

将映射Simple_CDC_Dept拖拽到包中clip_image020

添加OdiSleep

clip_image020[1]完成接口后调用 OdiSleep 等待1秒,然后继续轮询。

执行包,我们发现这个包会一直在执行,并处于 OdiWaiteForLogData 这一步。用下面的 SQL 插入数据:

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

insert into odi_src.dept (deptno, dname, loc) values ('70', 'assitant', 'boston');

从 Operater 中我们发现这个会话会完成一个循环,clip_image021

查询 ODI_TAG中的 DEPT 表,我们也可以发现数据已经同步过去。

我们可以继续删除源表的数据,我们可以看到数据很快会被同步过去。clip_image022

8清除日志

删除运行的包

删除日记

image

这个操作将启动一个会话,请在 Operator 中检查会话执行的结果。如果成功完成,请检查数据库,你应该可以看到 CDC 相关的对象:触发器和日记表和视图都被删除掉了。

从CDC中删除

image

完成之后刷新,应该可以看到表的图标上面的小时钟消失了。模型上已进行日记记录的表为空

image

本文转载自:http://www.cnblogs.com/xqzt/p/4510830.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
深入了解当前ETL中用到的一些基本技术

【赛迪网-IT技术报道】前言: 数据集成是把不同来源、格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能、数据仓库系统的重要组成部分。ETL是企业...

dwf07223
06/28
0
0
一步一步配置autolog CDC

CDC的全称是Change Data Capture,主要用在数据仓库中,对原数据库的数据进行抽取、传输到数据仓库中,用于进行分析和统计。CDC有同步模式和异步模式: 1. CDC同步模式: 通过trigger来实现。...

陶诗德
2014/08/29
0
0
深入了解当前ETL中用到的一些基本技术

数据集成是把不同来源、格式和特点的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享,是企业商务智能、数据仓库系统的重要组成部分。ETL是企业数据集成的饕饩龇桨浮N恼麓覧...

bsbforever
06/26
0
0
Introduction to Change Data Capture (CDC) in SQL Server 2008[转]

Change Data Capture records INSERTs, UPDATEs, and DELETEs applied to SQL Server tables, and makes a record available of what changed, where, and when, in simple relational 'chan......

长平狐
2012/09/04
75
0
干货分享:CDC实时数据复制,大神教你调性能

数据实时复制任务的成与败,取决于多方面的因素,例如:被复制数据本身情况,源系统和目标系统的自身运行状况,网络通讯方面,系统架构设计和实施人员专业技术水平等等。面对复杂而艰巨的任务...

勿忘初心321
2016/09/05
14
0
追踪记录每笔业务操作数据改变的利器——SQLCDC

对于大部分企业应用来用,有一个基本的功能必不可少,那就是Audit Trail或者Audit Log,中文翻译为追踪检查、审核检查或者审核记录。我们采用Audit Trail记录每一笔业务操作的基本信息,比如...

长平狐
2012/09/04
58
0
使用MS sql CDC功能记录用户登录情况

本文部分内容转载自:追踪记录每笔业务操作数据改变的利器——SQLCDC http://www.cnblogs.com/artech/archive/2010/11/20/cdc.html SharePoint foundation使用form user的认证方式。最近企业...

yuxye
2017/05/26
0
0
从SQL Server到MySQL,近百亿数据量迁移实战

沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:Java 的版本是 1.2,C# 尚未诞生,MySQL 还没有被 Sun 收购,版本号是 3.23。工程师们选择了当时最合适的微软体系,...

狄敬超(3D)
05/29
0
0
Oracle Data Integrator 介绍

本文介绍了 Oracle Data Integrator,它是一个基于 Java 的中间件,可以使用数据库在 SOA 中执行基于集合的数据集成任务。 现在,复杂的“可热插拔”系统和面向服务的体系结构 (SOA) 得到了广...

mj4738
2013/03/21
0
0
InfoSphere CDC 企业传统数据到大数据集成的加速器

我们常常会思考什么样的数据才是大数据,只有数据量大才能真正称之为大数据吗?其实不然,大数据的特征应该包括数量、速度,多样性和精准性这四个方面,也就是通常所说的4个V: Volume,Velocity,...

勿忘初心321
2016/12/08
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部