Oracle Database Change Data Capture feature

变化数据捕获是一个通称,是用来描述捕捉增量变化应用到数据存储。随着数据量的不断增长和数据存储日益变化,数据捕获是数据仓库一个重要功能,特别是要求实时或近实时的数据仓库。

在Oracle数据库概念中,数据采集的变化数据库功能,能够在Oracle数据库上捕捉增量。传统上你会必须修改源代码的应用,以捕获增量变化。

Oracle的变化数据捕获使增量变化捕获而不对源程序做任何更改。

Oracle数据库10g第2版介绍异步分布式CDC,比原有9i数据库第2版有了更大的提高。这食谱介绍如何设置这样一个异步变化数据捕获环境。

模式分类对比:

同步CDC模式(Synchronous Mode)通过在源库上建立trigger的方式来捕获增量数据,因此可以做到实时抽取增量数据.

异步HotLog模式(Asynchronous HotLog Mode)直接从source database的online redo log file中抽取增量数据,由于需要解析日志文件,会有一定的时间延迟。change table也必须在源库中生成。该模式由于是在源数据库中解析日志,对源数据库也会造成一定的压力,但是比同步CDC模式的压力要小一些。

异步分布式HotLog模式(Asynchronous Distributed HotLog Mode)和异步HotLog模式相比,主要是将多个source database的当前联机日志中解析出增量数据,然后传递一个staging database中处理,便于集中式数据管理。

异步AutoLog模式(Asynchronous AutoLog Mode)则是先将日志文件从source database传递到staging database,然后在staging database执行日志分析。这样可以将对source database的压力减到最小

Publishers and Subscribers (发布用户和订阅用户)

publisher 就是发布变化数据捕捉的数据库用户.所以在ODI需要先创建一个发布者.

subscriber 就是通过所谓的订购,利用这个捕捉的变化数据的数据库用户,也可以理解为订阅者.

出于安全原因,发布者和订阅用户不应该是相同的数据库用户。一个 Publisher可以支持许多subscriber用户。

CDC利用变化表和用户视图。数据变化写入变化表为使用CDC提供了一个可扩展的基础架构.用户针对变化表的数据可以获得一致数据变化集的视图。用户可以扩展和清除订阅窗户,通过数据库视图,隐式地改变数据集。如果没有任何用户订阅变化数据,变化表中的数据可以被清除。CDC 通过PL/SQL包进行调用.

CDC有两种捕捉数据方式 同步CDC和异步CDC.

异步CDC又分3种模式: 异步HotLog模式,异步分布式HotLog模式,异步AutoLog模式.

同步CDC模式创建方式:

1.创建Publisher用户,在sys用户中创建变化表集(change set),然后在变化集中创建相应的变化表

(change table),一个change set可以对应多个change table.

2.创建Subscriber用户,publisher用户把change table访问权限授予subscriber用户.

3.Subscriber可以创建subscription(订阅),通过创建subscribe可以订阅change set中多个source table,

这个table是change table的源表.

4.激活订阅 activate subscription

5.扩展窗口 extend_windows,扩展窗口以后才能看到数据变化.如果想每次都看到数据的变化,必须每次扩展窗口.

上面的5个步骤,是在Oracle数据库中实施的步骤,那么在ODI中如何体现呢?下面我们来具体的实施方法.

因为同步模式CDC是通过触发器的方式来实现,所以数据库可以运行在非归档的模式下.

1.在ODI中CDC是通过日志知识模块来实施的,所以我们首先要引入知识模块

在ODI项目中选择日记JKM,然后选择右键,导入知识模块,因为我们是用同步模式CDC,选择"JKM Oracle Simple"知识KM就可以,我们还可以看到JKM Oracle Consistent,再后面的异步CDC,我们会引用进来,呵呵.

2.

在模型属性中选择日志记录TAB页,然后选择简单,选择日志记录KM时,可以看到刚才我们添加的KM,JKM Oracle Simple.CDC, 这个KM下面有说明,不适合频繁的操作,不会对生产系统带来价值,反而影响性能.因为这个JKM是触发器的形式.

这个时候,我们在模型中也已经定义好了JKM,下面就可以在模型的Data Store中进行添加到CDC,我们也可以针对整个模式做CDC,这里我们选择单独的Data Store.

我们先查看系统已有的触发器:

SQL> conn odi_tmp/odi_tmp

已连接。

SQL> select * from user_triggers;

未选定行

SQL>

可以看到目前开发用户下面是没有触发器的.

选择JKM以后,点击应用.

后面,我们可以通过数据库确认ODI在数据库中建立了触发器.

3.开始添加Data Store到数据源

添加数据源到CDC以后,会看到CDC左上角出现一个表的橙色图标,表示已经加到CDC,但是还没有启动.

4.启动日志

启动日志以后,我们需要定义ODI的订阅者,也就是需要捕捉这个日志数据的用户.

启动日志会弹出执行对话框,选择相应的上下文,如果切换到生产库,切换上下文就可以.

5.开始订阅日志,选择订阅用户

订阅时,因为我们用SUPERVISOR用户登录,所以系统会默认用

SUNOPSIS用户

点击确定以后,可以看到Data Store的左上角有个绿色时钟的图标,表示已经成功启动CDC

6.查看CDC的订阅状态

绿色图标表示已经成功订阅.

7.确认数据库中是否也用相应的触发器

这个时候,再次查看ODI_TMP下面的触发器,为什么要查看ODI_TMP下面:

因为我们在Topology Manager当中定义ORACLE连接的时候,就已定义了工作架构的用户,

默认是和架构用户一样,所以我们可以看到选择工作架构用户的好处.

这时可以看到触发器已经成功被ODI创建:

SQL>select trigger_name,trigger_type,table_name,status,action_type from user_triggers;

TRIGGER_NA TRIGGER_TYPE     TABLE_NA STATUS           ACTION_TYPE

---------- ---------------- -------- ---------------- ----------------------

T$CUSTOMER AFTER EACH ROW   CUSTOMER ENABLED          PL/SQL

8.我们来测试CDC同步模式的数据

我们右键选择数据模型以后,点击数据,进行数据的编辑

点击+号,我们添入一条数据

点击应用以后,我们可以看到数据已经加入

点击日志数据,查看CDC是否已经成功捕捉数据库表的数据

9.查看ODI是否捕捉数据

我们在接口把同步CDC加入到接口中

我们点击源数据源下面有个”仅已记录日记记录的数据”前面的方框,点击以后,就把CDC成功添加到接口了.

1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

8.jpg

9.jpg

10.jpg

11.jpg

12.jpg

13.jpg

14.jpg

CDC不同模式在ODI中体现系列之一 同步模式的更多相关文章

  1. Singer 学习十 同步模式

    sync 模式是属于tap 的操作,同步模式下,tap 需要提交 schema. record .state message, singer 指南对于每种 类型有详细的说明 streams 每个str ...

  2. CDC不同模式在ODI体现系列之二 异步模式

    CDC不同模式在ODI体现系列之二 异步模式 2 异步模式需要在数据库中做一些准备工作: 改数据为归档并启用logminer: SQL> shutdown immediate 数据库已经关闭. ...

  3. ODI中的CDC

    ODI中的CDC是通过一组所谓的日志知识模块(Journal Knowledge Module,JKM)实现的,在项目中加在了这些模块后,就可以在接口设计时选择全量数据,还是变化数据.   ODI共提 ...

  4. 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素

    模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...

  5. (5.12)mysql高可用系列——复制中的在线切换GTID模式/增加节点/删除节点

    目录 [0]需求 前提,已经假设好基于传统异步复制的主库和从库1. [0.1]传统异步切换成基于GTID的无损模式 [0.2]增加特殊要求的从库 [1]操作环境 [2]构建 复制->半同步复制 ...

  6. ODI中删除数据的处理

    ODI中删除数据的处理 一.前提知识:数据从源数据库向数据仓库抽取时,一般采用以下几种方式: 全抽取模式如果表的数据量较小,则可以采取全表抽取方式,以TRUNCATE/INSERT方式进行数据抽取. ...

  7. [工作中的设计模式]享元模式模式FlyWeight

    一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...

  8. 开始VS 2012中LightSwitch系列的第3部分:我该选择哪一个屏幕模板

    [原文发表地址]  Beginning LightSwitch in VS 2012 Part 3: Screen Templates, Which One Do I Choose? [原文发表时间] ...

  9. 大话设计模式C++版——工厂模式在COM中的典型应用

    上篇<大话设计模式C++版——抽象工厂模式>中,我们拯救世界未遂,留下小小的遗憾,本篇中我们将给出一个解决方案——COM组件技术,同时也顺便扯扯工厂模式在COM组件技术中的应用. 工厂模式 ...

随机推荐

  1. Less2css error 终极解决方案

    使用sublime Text3 的时候,安装less2Css后,和很多人一样以为大功告成,开始要运行编译less文件,结果开始发现 于是乎开始搜索问题和解决方案,然后就有了下面的解决方案1 方案1:通 ...

  2. PS切图保存后的背景图为透明

    1.若想PS切图保存后的背景图为透明,那么则需要在如下图中所示的修改即可,切图后[文件]——>[存储为web格式]——>[PNG-24]: 2.要想在css中的背景图片为相通,则先剪切一个 ...

  3. 用python发送GET和POST请求

    GET请求: python2.7: import urllib,urllib2 url='http://192.168.199.1:8000/mainsugar/loginGET/' textmod ...

  4. make file 详

    一: linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a ...

  5. MVC 返回ActionResult 类型

    1. Content() 返回文本类型,比如"Hello World!". 2.File() 返回文件类型,如PDF,JPG. 3.HttpNotFound() 返回404 HTT ...

  6. VS2015中使用Git

    10分钟学会在VS2015中使用Git 写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微 ...

  7. Three.js基础

    Three.js基础探寻一 Three.js基础探寻一   1.webGL 一种网络标准,定义了一些较底层的图形接口. 2.Three.js 一个3Djs库,webGL开源框架中比较优秀的一个.除了w ...

  8. php date操作

    date(format,timestamp) d - 月中的天 (01-31) m - 当前月,以数字计 (01-12) Y - 当前的年(四位数) h 小时,12 小时格式,有前导零 01 到 12 ...

  9. 优雅智慧女性课程班 - 公开课程 - 课程介绍 - 中国人民大学商学院EDP中心

    优雅智慧女性课程班 - 公开课程 - 课程介绍 - 中国人民大学商学院EDP中心 优雅智慧女性课程班 课程总览 思想睿智成熟,外表美丽自信,气质优雅端庄,是魅力女性所应具备的特性.在当今不确定环境下, ...

  10. Hibernate 、多表关联映射 - 一对一关系映射(one- to-one)

    hibernate.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...